Реализация частного или внутреннего интерфейсаC#

Место общения программистов C#
Ответить
Anonymous
 Реализация частного или внутреннего интерфейса

Сообщение Anonymous »

Среда: .NET 8.0
Среда модульного тестирования NUnit 4.2.2
Целью является создание модульных тестов для определенного класса (), который опирается на другой класс (), внедренный посредством внедрения зависимостей. И ClassA, и ClassB имеют внутренние методы. Тесты для ClassA должны позволять имитировать или связывать (возможно, с использованием отражения) возвращаемые значения метода в ClassB.
Я начал с имитирования ClassB с помощью Moq :

Код: Выделить всё

Mock _mockClassB
CLassA _classA

[Setup]
public void Setup()
{
_mockClassB = new Mock();
_mockClassB.Setup(b => b.method1()).Returns("test_string");
_classA = new ClassA(_mockClassB);
}
Это работает, но мне нужно сделать метод1 в ClassB виртуальным
Затем я создал интерфейс для ClassB р>

Код: Выделить всё

public interface IClassB
{
internal string method1 { get; set;}
}
Таким образом я могу сохранить старую реализацию ClassB (но сделать метод1 общедоступным), а затем создать тестовую реализацию ClassB< /код>

Код: Выделить всё

public ClassBWrapper
{
public string method1()
{
return "test_string";
}
}
а затем в своих тестах я бы использовал оболочку вместо исходного класса:

Код: Выделить всё

private object _classA;

[Setup]
public void Setup()
{
var classAType = typeof(ClassA);
_classA = Activator.CreateInstance(
classAType,
BindingFlags.Instance | BindingFlags.NonPublic,
binder: null,
args: new object[] { },
culture: null
)

SetField("_classB", new ClassBWrapper());
}
Но здесь я снова вынужден сделать методы класса B общедоступными.
Что я могу сделать, чтобы удовлетворить свои требования?

Подробнее здесь: https://stackoverflow.com/questions/791 ... ementation
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»