繁体   English   中英

单元测试嵌套方法

[英]Unit testing a nested method

说我有这样的服务:

public class MyService : IMyService
{
    public void DoStuff(IDependency dependency, string value)
    {
        dependency.SomeMethod(value, true);
        DoOtherStuff(dependency);
    }

    public void DoOtherStuff(IDependency dependency)
    {
        // do some stuff
    }
}

现在,当对MyService进行单元测试时,我可以轻松地模拟依赖关系并测试依赖关系是否正确使用:

public void MyServiceTest()
{
    // Arrange 
    var mockDependency = new Mock<IDependency>();
    mockDependency.Setup(m => m.SomeMethod());
    var service = new MyService();

    // Act
    service.DoStuff(mockDependency.Object, "value");

    // Assert
    mockDependency.Verify(v => v.SomeMethod(), Times.Once);
}

如何测试该服务是否调用DoOtherStuff 还是这是一个坏模式? 正确的方法是什么?

对于另一堂课,您将按照书面要求使用最小起订量。

但是,该类正在测试中,我认为您不应在测试中将这两种方法分开,出于类似的原因,您不会测试私有方法。 归根结底,如果代码经过重构,则测试失败时不会调用您的第二个方法。 不,公共API不受影响。

最好像现在所说的那样,在调用DoOtherStuff时对依赖关系发生什么做出断言。

只要满足合同约定,您就不必关心单元测试如何实现特定的公共功能。

注意:上面的“ public”通常在“外部可用”的意义上使用,通常与C# public一致,但是有时您希望/必须将其他方法标记为public,即使它实际上不是外部合同的一部分。

如果确实必须测试调用了DoOtherStuff则可以将该方法virtual并使用提供其自身版本的测试实现,该实现以某种方式通知您有关调用的信息(Moq也可以为您构建一个)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM