使用 Rhino Mocking 对删除功能进行单元测试
Use Rhino Mocking to unit test delete functionality
我正在使用 Rhino 模拟进行单元测试以测试删除 transport.However 我不确定如何测试它的方法。下面是我所拥有的,但它失败了(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);
}
如何测试是否删除了正确的传输?
两个免责声明:(1) 我多年前从 Rhino Mocks 转移到 Moq,所以这是凭记忆。 (2) 我看不到您正在测试的代码,所以我不得不假设您正确设置了模拟以匹配代码的工作方式。
您需要检查是否对依赖项进行了正确的调用。这是使用 Verify
完成的。将此添加到您的 assert
部分。
mockTransloaderRepository.Verify(t => t.DeleteAsync(ostTransloader5));
您可以通过将被测代码更改为调用 DeleteAsync(null)
来证明这是否正在检查正确的东西,这应该会使测试失败,当您放回去时,测试应该会通过。
顺便说一句,在 Moq 中,我也建议使用 Times.Once
参数,以确保它被调用一次,我假设 Rhino Mocks 有类似的东西,但我很抱歉,我不知道那是什么
我正在使用 Rhino 模拟进行单元测试以测试删除 transport.However 我不确定如何测试它的方法。下面是我所拥有的,但它失败了(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);
}
如何测试是否删除了正确的传输?
两个免责声明:(1) 我多年前从 Rhino Mocks 转移到 Moq,所以这是凭记忆。 (2) 我看不到您正在测试的代码,所以我不得不假设您正确设置了模拟以匹配代码的工作方式。
您需要检查是否对依赖项进行了正确的调用。这是使用 Verify
完成的。将此添加到您的 assert
部分。
mockTransloaderRepository.Verify(t => t.DeleteAsync(ostTransloader5));
您可以通过将被测代码更改为调用 DeleteAsync(null)
来证明这是否正在检查正确的东西,这应该会使测试失败,当您放回去时,测试应该会通过。
顺便说一句,在 Moq 中,我也建议使用 Times.Once
参数,以确保它被调用一次,我假设 Rhino Mocks 有类似的东西,但我很抱歉,我不知道那是什么