我的NUnit测试实际上是否正常运行?

时间:2014-01-08 22:54:58

标签: c# unit-testing ninject ninject-extensions

我正在努力成为一名优秀的开发人员,实际上对我编写的一些代码进行了一些单元测试。

我正在使用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%确定它正在工作但我认为最好与比我更了解的人检查一下!

1 个答案:

答案 0 :(得分:0)

如果您的目标是测试您在其他地方实施的IMyService,那么您做错了。你正在做的是创建一个模拟IMyService并测试它是否被正确模拟,这实现了不多。

如果需要IFoo来测试你的IMyService,你应该使用kernel.GetMock(),因为你的IMyService实现将IFoo作为其构造函数的参数(就像你在链接的例子中所做的那样)。