Mock优势是针对抽象的接口创建虚拟的对象,为了追求接口的粒度更小,通常接口会继承其他接口,这时候如何Mock呢?下面的例子演示了这种情形下如何使用Mock来写单元测试。
第一个接口
public interface IFirstInterface
{
int firstInterfaceDoSomething();
}
第二个接口
public interface ISecondInterface
{
int secondInterfaceDoSomething();
}
第三个接口,继承前两个接口
public interface IMultiInterface:IFirstInterface,ISecondInterface
{
int multiInterfaceDoSomething();
}
有一个类,里面使用了第三个接口
public int MultiInterfaceUser<T>(T x)
where T:IFirstInterface,ISecondInterface
{
IFirstInterface f = (IFirstInterface)x;
ISecondInterface s = (ISecondInterface)x;
return f.firstInterfaceDoSomething() + s.secondInterfaceDoSomething();
}
单元测试如下:
[TestMethod]
public void TestMultiInterface()
{
Mock<IMultiInterface> multiMock = new Mock<IMultiInterface>();
Mock<IFirstInterface> fisrtMock = multiMock.As<IFirstInterface>();
fisrtMock.Setup(x => x.firstInterfaceDoSomething()).Returns(2);
Mock<ISecondInterface> secondMock = multiMock.As<ISecondInterface>();
secondMock.Setup(x => x.secondInterfaceDoSomething()).Returns(4);
int result = new SomeClass().MultiInterfaceUser(multiMock.Object);
Assert.AreEqual(6, result);
}
这种情形比较常见,我们不依赖实现接口的对象,对接口的行为进行了定义,并直接进行单元测试。
本文介绍了在接口继承的情况下如何使用Mock进行单元测试,通过创建虚拟对象并定义接口行为,实现对代码逻辑的独立测试。
968

被折叠的 条评论
为什么被折叠?



