Как я могу утверждать, что метод вызывается без выполнения кода внутри метода?
Представьте, что у нас есть код ниже
public class test
{
public void Condition(x,y)
{
if (x == y)
{
methodOne();
}
else
{
methodTwo();
}
}
public void methodOne(){//do some database stuff}
public void methodTwo(){//do some database stuff}
}
Я хочу утверждать, что если methodone вызывается, когда x==y или нет, но я не хочу, чтобы мой тест выполнял код внутри моего метода 1, поскольку он будет выполнять некоторые операции с базой данных...
Я пишу что-то вроде этого
MockRepository mockRepository=new MockRepository();
var Mock = mockRepository.PartialMock<test>();
mock.Replay();
mock.condition(1,1);
mock.AssertWasCalled(x=>x.methodOne);
mock.VerifyAllExpectations();
но он пытается запустить запустить материал в методе 1, и я не хочу, чтобы мой тест выполнял соединение с базой данных, мне просто нужно убедиться, что мое условие работает, и оно вызвано или нет.
1 ответ
Вы смешиваете свои проблемы, бизнес-логику и доступ к данным в одном классе. Вам нужно подумать о принципе единой ответственности и разделении интересов.
Ваш public void Condition(x,y)
должно быть на уровне бизнес-логики с methodOne()
а также methodTwo()
находясь на уровне доступа к данным.
Уровень доступа к данным должен быть введен ( IoC) в уровень бизнес-логики, чтобы его можно было отключить. Таким образом, когда вы тестируете метод Condition, вы переходите в фиктивный уровень доступа к данным, который фактически не подключается к базе данных.
Таким образом, вы можете проверить, что Условие было вызвано, как и сейчас, без каких-либо побочных эффектов, таких как запись в базу данных. Когда вы сталкиваетесь с подобными ситуациями, это помогает вам превратить ваш код в лучшую архитектуру и в конечном итоге может привести вас к исследованию разработки через тестирование.