Как перевести «непубличный» метод в кроты публичного класса - PullRequest
2 голосов
/ 24 июля 2011

У меня есть публичный метод, который использует локальный приватный метод для получения данных из базы данных.

private string SomeMethod(string) { ... Doing some operations ... string data = GetDBData(string); Doing some operations ... }

Я хочу перевести / изолировать закрытый метод GetDBData (string), используя родинки, чтобы моему тесту не требовалась БД.

Очевидно, у меня вопрос: как это сделать? благодарю вас Урия

EDIT
Дополнительная информация:

я пытался изменить методы доступа к методам как на общедоступную, так и на внутреннюю защиту, в обоих случаях теперь я могу видеть методы как родинки. НО при запуске теста все еще используется оригинальный метод, а не обходной путь, который я реализовал в PexMethod.

Ответы [ 2 ]

2 голосов
/ 25 июля 2011

Вы можете попробовать любое из следующих действий.

  • Сделать метод внутренним и добавить в сборку такой атрибут:

    [assembly: InternalsVisibleTo("<corresponding-moles-assembly-name>")]

  • Измените метод доступа на защищенный виртуальный , а затем используйте заглушку.

  • Измените класс так, чтобы он получилинтерфейс (IDataAccessObject) в качестве параметра конструктора, причем SomeMethod является одним из методов этого интерфейса, а затем передайте заглушку этого интерфейса вашему классу в методах тестирования.
1 голос
/ 25 июля 2011

Я понял это

Если у меня есть общедоступный MyClass с личным SomeMethod

public class MyClass
{
    private string SomeMethod(string str){}
}

, если вы хотите вызвать метод SomeMethod, вам нужно использовать AllInstances в методе теста:1006 *

[PexMethod]
SomeMethod(string str)
{
    MMyClass.AllInstances.SomeMethod = (instance, str) => { return "A return string"; };
}
  • обратите внимание, что лямбда получает параметр экземпляра в качестве первого параметра.Я не уверен, что это за функция.
...