Как отвлечь «не публичный» метод в родинах публичных классов
-
25-10-2019 - |
Вопрос
У меня есть общедоступный метод, который использует локальный частный метод для получения данных из БД.
private string SomeMethod(string)
{
...
Doing some operations
...
string data = GetDBData(string);
Doing some operations
...
}
Я хочу отвлечь/изолировать частный метод getdbdata (строка), используя родинки, чтобы мой тест не потребует БД.
Очевидно, мой вопрос: как это сделать? Спасибо, Урия
РЕДАКТИРОВАТЬ
Дополнительная информация:
Я попытался изменить аксессов метода как на общественную, так и внутреннюю защиту, в обоих случаях я теперь вижу методы как родинки. Но при запуске теста исходный метод все еще используется, а не обход, который я реализовал в Pexmethod.
Решение 2
я понял
Если у меня есть публичный MyClass с частным Somemethod
public class MyClass
{
private string SomeMethod(string str){}
}
Если вы хотите, чтобы моль, метод Somemethod, вам нужно использовать AllinStances в методе испытания:
[PexMethod]
SomeMethod(string str)
{
MMyClass.AllInstances.SomeMethod = (instance, str) => { return "A return string"; };
}
- Обратите внимание, что лямбда получает параметр экземпляра в качестве первого параметра. Я не уверен, что это такое функция.
Другие советы
Вы можете попробовать любое из следующего.
Сделайте метод внутренний и добавьте подобный атрибут в сборку:
[assembly: InternalsVisibleTo("<corresponding-moles-assembly-name>")]
Измените метод доступа на защищенный виртуальный а затем используйте заглушку.
- Refactor Your Class, чтобы он получил интерфейс (idataaccessObject) в качестве параметра конструктора, что -то является одним из методов этого интерфейса, а затем передайте заглушку этого интерфейса к вашему классу в методах испытаний.