В зависимости от того, как составлен ваш тест, создается впечатление, что цель вашего теста - проверить, правильно ли вызываются классовые зависимости 2 _step1
и _step2
в методе Execute()
.Это хороший первый тест для написания.
К сожалению, ваш тест не проверяет должным образом это условие.Поскольку вы устанавливаете ожидания на _step1
и _step2
, вам необходимо изменить их с заглушек на макеты .
Кроме того, поскольку вы не устанавливаете ожидания на выходе, вы должны изменить их на заглушки из ложных сообщений или удалить их полностью, потому что вы звоните IgnoreArguments()
[TestMethod]
public void Execute_IsCalled_Step1AndStep2AreCalled()
{
//Arrange
MockRepository mock = new MockRepository();
var context = mock.Stub<IContextInfo>();
var step1 = mock.StrictMock<IStep1>();
var step2 = mock.StrictMock<IStep2>();
step1.Expect(x => x.DoStep1(null, null)).IgnoreArguments();
step2.Expect(c => c.DoStep2(null, null)).IgnoreArguments();
mock.ReplayAll();
//Act
var controller = new MyController(context, step1, step2);
controller.Execute();
//Assert
mock.VerifyAll();
}
Я внес несколько дополнительных изменений для ясности:
Я переименовал ваш метод, чтобы более адекватно описать тест.Я обычно следую схеме: MethodUnderTest_Condition_ExpectedResult()
.Также я удалил Assert.IsNotNull(controller);
, так как он не относится конкретно к тестируемому условию.
Существует, безусловно, больше тестов, которые вы можете захотеть написать для этого метода (Обеспечение вывода шага 1 является входом шага 2, например).Самое главное, не забывайте четко указывать в своем тесте, что именно вы тестируете, и делайте все возможное, чтобы протестировать одно условие за один раз.