我正在使用Rhino模拟进行单元测试来测试删除传输的方法,但是我不确定如何测试它。下面是我所拥有的,但是它失败了(Assert.AreEqual失败了,因为结果返回,并且异常对象引用未设置为对象的实例)
/// <summary>
/// Test Case: to
/// </summary>
[TestMethod]
public void Should_DeleteTransload()
{
//expect
mockTransloaderRepository.Expect(r => r.GetOneAsync(x => x.Id == ostTransloader5.Id)).IgnoreArguments().Return(Task.FromResult(ostTransloader5));
mockOstTransloaderService = MockRepository.GenerateMock<OstTransloaderService>(mockTransloaderRepository, mockAuditContext);
mockTransloaderRepository.Expect(r => r.AddAsync(ostTransloader5)).IgnoreArguments().Return(Task.Run(() => true));
mockTransloaderRepository.Expect(r => r.AddAsync(ostTransloader4)).IgnoreArguments().Return(Task.Run(() => true));
List<OstTransloader> ostTransloaders = new List<OstTransloader>() { ostTransloader4 };
mockTransloaderRepository.Expect(t => t.DeleteAsync(ostTransloader5)).IgnoreArguments().Return(Task.Run(() => true));
////act
var result = mockOstTransloaderService.PurgeTransloadShipmentMaterial(transloadIds);
//// assert
Assert.IsNotNull(result);
Assert.AreEqual(ostTransloaders, result);
}
如何测试正确的转载已删除?
答案 0 :(得分:1)
两个免责声明:(1)多年前,我从Rhino Mocks搬到了Moq,所以这是出于记忆。 (2)我看不到正在测试的代码,因此我不得不假设您正确设置了模拟程序以匹配代码的工作方式。
您需要检查是否对依赖项进行了正确的调用。这是使用Verify
完成的。将此添加到您的assert
部分。
mockTransloaderRepository.Verify(t => t.DeleteAsync(ostTransloader5));
您可以通过将被测代码更改为调用DeleteAsync(null)
来证明这是否是对的事情,这将使测试失败,并且当您将其放回时,测试应该通过。
顺便说一句,在Moq中,我也建议使用一个Times.Once
参数,以确保它被精确地调用过一次,并且我假设Rhino Mocks有类似的东西,但是很抱歉,我不知道不知道那是什么。