假设我有一个我正在嘲笑的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