Я хотел бы выполнить модульный тест метода на классе, который я сделал, но этот метод требует вызова другого метода. Пример:Методы, зависящие от модуля тестирования
// This would work
MyClass myClass1 = new MyClass(mockDevice);
myClass1.Run(myDatastructure);
myClass1.Stop();
// This would throw an InvalidOperationException
MyClass myClass2 = new MyClass(mockDevice);
myClass2.Stop();
Run
начинает операцию на аппаратном устройстве, и Stop
, конечно, пытается остановить эту операцию (посылая команду сброса-и запуск тайм-аут таймера).
Во всяком случае я хотел бы испытать различные пост-условия вызова Stop
, но я не хотел бы иметь, чтобы позвонить Run
, потому что я тестирую Stop
- не Run
! Я хотел бы что-то вроде этого:
MyClass myClass = new MyClass(mockDevice);
myClass.Stop();
Assert.IsTrue(mockDevice.ResetCalled);
Пока я вижу только одно из возможных решений, и это создать TestableMyClass
, который наследуется от MyClass
, что позволяет установить правильное внутреннее состояние экземпляра MyClass
до того позвонив по телефону Stop
. Проблема с этим решением заключается в том, что я должен изменить свой вариант MyClass
, чтобы иметь защищенные члены вместо частных членов, а I не делает, как идея изменить реализацию, чтобы проверить ее!
Должен ли я использовать это решение, есть ли ошибка в моем дизайне или есть более разумный способ сделать это?
Итак, вы думаете, что можно просто вызвать Run, Stop, Assert? – toxvaerd
Да, я так думаю. А также стоит упомянуть Stop without Run для проверки необходимого исключения. В конечном счете, недействительно сначала вызвать Stop without Run ... –