Как отвлечь «не публичный» метод в родинах публичных классов

StackOverflow https://stackoverflow.com/questions/6806818

  •  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) в качестве параметра конструктора, что -то является одним из методов этого интерфейса, а затем передайте заглушку этого интерфейса к вашему классу в методах испытаний.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top