假設我有一個我正在嘲笑的IFoo接口。這個接口有三種方法。我需要測試被測系統至少調用三種方法之一。我不在乎多少次,也不在乎它所謂的參數,但忽略所有方法但不觸及IFoo模擬的情況就是失敗的情況。Rhino Mocks - 如何測試至少有一組方法被調用?
我一直在瀏覽Expect.Call文檔,但看不到一個簡單的方法來做到這一點。
任何想法?
假設我有一個我正在嘲笑的IFoo接口。這個接口有三種方法。我需要測試被測系統至少調用三種方法之一。我不在乎多少次,也不在乎它所謂的參數,但忽略所有方法但不觸及IFoo模擬的情況就是失敗的情況。Rhino Mocks - 如何測試至少有一組方法被調用?
我一直在瀏覽Expect.Call文檔,但看不到一個簡單的方法來做到這一點。
任何想法?
當一個函數被調用時,你可以給Rhino mocks一個lambda運行。這個lambda可以增加一個計數器。斷言計數器> 1,你就完成了。
評論人:Don Kirkby: 我相信Mendelt指的是Do方法。
不知道這是否回答你的問題,但我發現如果我需要用Rhino(或任何類似的框架/庫)來做任何事情,任何我不知道如何做的事情,最好只是創建一個手動模擬。
如果調用任何方法,創建一個實現接口並將公共布爾型字段設置爲true的類將變得非常簡單,您可以爲該類指定一個描述性名稱,這意味着(最重要的)下一個查看的人代碼將立即理解它。
如果我正確理解了你的話,你想檢查一下接口在三種指定方法中至少有一次被調用。通過the quick reference看我不認爲你可以在Rhino Mocks中做到這一點。
直覺上我認爲你想寫一個脆弱的測試,這是一個壞的東西。這意味着不完整的被測試類的規格。我強烈建議你考慮這個設計,以便被測試的類和測試可以有一個已知的行爲。
然而,要用一個例子來說,你可以這樣做(,但不要)。
[TestFixture]
public class MyTest {
// The mocked interface
public class MockedInterface implements MyInterface {
int counter = 0;
public method1() { counter++; }
public method2() { counter++; }
public method3() { counter++; }
}
// The actual test, I assume you have the ClassUnderTest
// inject the interface through the constructor and
// the methodToTest calls either of the three methods on
// the interface.
[TestMethod]
public void testCallingAnyOfTheThreeMethods() {
MockedInterface mockery = new MockedInterface();
ClassUnderTest classToTest = new ClassUnderTest(mockery);
classToTest.methodToTest();
Assert.That(mockery.counter, Is.GreaterThan(1));
}
}
(有人檢查我的代碼,我已經從我的腦袋現在寫的這一點,並沒有寫C#的東西,現在大約一年)
我很想知道你爲什麼'雖然這樣做。
我相信Mendelt指的是Do方法。 – 2008-09-30 19:59:42
感謝您對我的回答太短的有用評論。將其添加到問題中。 – Mendelt 2008-09-30 20:19:54