C# 我的NUnit测试是否运行正常?
我正在努力成为一名优秀的开发人员,并为我编写的一些代码进行正确的单元测试 我将NUnit与Ninject.MockingKernel.Moq一起使用,并遵循上的文档。下面是一个我一直在使用的示例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
[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");