【发布时间】:2010-12-08 11:29:26
【问题描述】:
考虑以下服务接口:
public interface IServiceA
{
void DoSomething(string s);
void DoSomething(string s, bool b);
}
public interface IServiceB
{
void DoSomething();
}
IServiceB 的实现依赖于 IServiceA,如下所示:
public class ServiceB : IServiceB
{
private IServiceA _serviceA;
public ServiceB(IServiceA serviceA)
{
_serviceA = serviceA;
}
public void DoSomething()
{
_serviceA.DoSomething("Hello", true);
}
}
即。依赖注入到构造函数中。
现在考虑对DoSomething() 方法进行单元测试。我希望断言调用了 IServiceA 中重载的 DoSomething 方法之一,但遵循单元测试不应该过多了解被测试方法的内部工作的一般原则,我希望不知道哪个调用了两个重载。考虑以下单元测试:
[TestFixture]
public class ServiceBTests
{
[Test]
public void DoSomething_CallsServiceA()
{
var serviceAMock = MockRepository.GenerateMock<IServiceA>();
var service = new ServiceB(serviceAMock);
service.DoSomething();
// Problem: How to check if EITHER:
serviceAMock.AssertWasCalled(s => s.DoSomething(Arg<String>.Is.NotNull, Arg<bool>.Is.Anything));
// OR:
serviceAMock.AssertWasCalled(s => s.DoSomething(Arg<String>.Is.NotNull));
}
}
我如何断言 任一 一个 或 两个方法中的另一个被调用?
【问题讨论】:
-
嗯。也许我的想法在这里有偏差。我想单元测试应该确定 DoSomething() 完全按照它应该做的。虽然该方法的内部工作与单元测试无关,但确切地知道该方法应该做什么需要,也许,确切地知道应该调用哪个重载。对此有何看法?
标签: unit-testing dependency-injection rhino-mocks assert