(C#,Rhino Mocks,MbUnit)。单元测试没有可观察状态变化的方法
我有一个名为AccountManager的类,它有一个RegisterUser()方法。此方法返回void,但会为任何错误抛出异常。 AccountManager调用调用其AddUser()方法的IDataRepository来执行数据库插入。
我使用Rhino Mock模拟了IDataRepository,并抛出了一个给定的参数集,并模拟了存储库中引发的异常。
[Test]
public void RegisterKnownUser()
{
MockRepository mocks = new MockRepository();
IDataRepository dataRepository = mocks.StrictMock<IDataRepository>();
using (mocks.Record())
{
Expect.Call(() => dataRepository.AddUser("abc", "abc", "[email protected]", "a", "bc")).Throw(
new InvalidOperationException());
}
using (mocks.Playback())
{
AccountManager manager = new AccountManager(dataRepository);
Assert.Throws(typeof (InvalidOperationException),() => manager.RegisterUser("abc", "abc", "[email protected]", "a", "bc"));
}
}
此测试正常工作。
我的问题是如何处理提供给RegisterUser的参数是正确和有效的情况。真正的IDataRepository不会返回任何东西,也不会抛出任何异常。所以总之AccountManager的状态不会改变。这是否意味着我不需要测试AccountManager.RegisterUser,因为它会导致我无法直接在被测试的类和方法中观察到。在模拟中对状态进行测试对我来说有点味道。我认为,只要我单独测试IDataRepository.AddUser,那么我就不需要测试AccountManager.RegisterUser的输入,这些输入会导致类中没有任何可观察的内容。
在此先感谢。
Ribgy:你能提供你想要描述的测试用例的代码吗? AccountManager会调用dataRepository吗? – 2010-08-13 09:56:41