C# 我的NUnit测试是否运行正常?

C# 我的NUnit测试是否运行正常?,c#,unit-testing,ninject,ninject-extensions,C#,Unit Testing,Ninject,Ninject Extensions,我正在努力成为一名优秀的开发人员,并为我编写的一些代码进行正确的单元测试 我将NUnit与Ninject.MockingKernel.Moq一起使用,并遵循上的文档。下面是一个我一直在使用的示例 [TestFixture] public class MyUnitTest { private readonly MoqMockingKernel _kernel; public MyUnitTest() { _kernel = new MoqMockingK

我正在努力成为一名优秀的开发人员,并为我编写的一些代码进行正确的单元测试

我将NUnit与Ninject.MockingKernel.Moq一起使用,并遵循上的文档。下面是一个我一直在使用的示例

[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();
    }
}

调试了测试和
方法。Id
实际上等于1,因此我75%确定它工作正常,但我认为最好与比我更有知识的人核实一下

如果您的目标是测试您在其他地方实现的IMyService,那么您就做错了。您正在做的是创建一个mock IMyService并测试它是否被正确地模拟,这并没有取得多大的效果


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

我没有在特定领域使用NUnit/Ninject模拟的经验,但是,您不应该使用一个
assert
子句来实际测试您想要测试的内容吗?moqService.VerifyAll()实际上会抛出一个异常,从而导致测试失败。这对我来说是全新的——我有一种感觉,我写测试的方式是不正确的。MyMethod实际上是在向数据库中添加一些内容,然后返回创建的对象。。。“哎呀,”格兰特尼在我有机会之前回答说!我想我现在明白了——问题是我在数据访问层中使用了存储库模式——我是否必须模拟我的服务中使用的所有存储库来正确测试它?
var method = service.MyMothod("With parameter");