[英]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.