(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