我正在努力成为一名优秀的开发人员,实际上对我编写的一些代码进行了一些单元测试。
我正在使用NUnit和Ninject.MockingKernel.Moq并遵循https://github.com/ninject/ninject.mockingkernel/wiki/Examples上的文档。以下是我一直在使用
的例子[TestFixture]
public class MyUnitTest
{
private readonly MoqMockingKernel _kernel;
public MyUnitTest()
{
_kernel = new MoqMockingKernel();
}
[SetUp]
public void SetUp()
{
_kernel.Reset(); // Not really sure why this is included (something to do with caching...)
}
[Test]
public void MyTest()
{
var moqService = _kernel.GetMock<IMyService>();
moqService.Setup(x=>x.MyMethod("With parameter")
.Returns(new MyObject {Id = 1, Name = "With parameter"});
var service = _kernel.Get<IMyService>();
service.MyMethod("With parameter");
moqService.VerifyAll();
}
}
现在,让我感到惊讶的是这实际上有效,但它实际上是在测试代码中的逻辑吗?或者它是说当你返回这个方法时这会被返回什么?
我做了一个小测试,MyMethod返回一个对象:
var method = service.MyMothod("With parameter");
调试测试,method.Id
确实等于1,所以我75%确定它正在工作但我认为最好与比我更了解的人检查一下!
答案 0 :(得分:0)
如果您的目标是测试您在其他地方实施的IMyService,那么您做错了。你正在做的是创建一个模拟IMyService并测试它是否被正确模拟,这实现了不多。
如果需要IFoo来测试你的IMyService,你应该使用kernel.GetMock(),因为你的IMyService实现将IFoo作为其构造函数的参数(就像你在链接的例子中所做的那样)。