如何测试服务功能是否需要运行步骤?

时间:2013-06-20 09:40:02

标签: c# unit-testing rhino-mocks

我有一个服务功能,需要运行步骤。我和Rhino Mocks有很多尝试,但没有运气。我无法通过测试。

所以问题是测试这个的最佳方法是什么?是否需要进行代码重构?

感谢任何帮助。非常感谢。

public class Service : IService
{
    public void Initialize()
    {
        Function1();
        Function1();
        Function1();
    }

    public void Function1() {}
    public void Function2() {}
    public void Function3() {}

}

public interface IService
{
    void Initialize();
    void Function1();
    void Function2();
    void Function3();
}

[Test]
public void Test1
{
    var mockService = MockRepository.GenerateMock<OfficePrinterService>();

    mockService.Initialize();

    // Test will Error Here.
    // No expectations were setup to be verified, ensure that the method call in the action is a virtual (C#) / overridable (VB.Net) method call
    mockService.AssertWasCalled(x=>x.Function1());
    mockService.AssertWasCalled(x=>x.Function2());
    mockService.AssertWasCalled(x=>x.Function3());
}

[Test]
public void Test2
{
    var mockService = MockRepository.GenerateMock<IOfficePrinterService>();

    mockService.Initialize();

    // Test will Error Here.
    // Rhino.Mocks.Exceptions.ExpectationViolationException : IService.Function1(); Expected #1, Actual #0.
    mockService.AssertWasCalled(x=>x.Function1());
    mockService.AssertWasCalled(x=>x.Function2());
    mockService.AssertWasCalled(x=>x.Function3());
}

1 个答案:

答案 0 :(得分:0)

您无法对测试对象设置期望值Service。这不是模拟。这是被测系统。您应该断言Function方法调用的可观察行为而不进行任何嘲弄(因为Service消费者在调用Initialize时期望发生什么?在内部调用它是无关紧要的 - 你的消费者不需要知道,他对最终结果感兴趣。