这个mbunit测试真的有用吗?

时间:2009-09-27 15:14:18

标签: .net testing ninject mbunit

[Test]
public void TestUserProfileInsert()
{
    using (new TestBindingsWrapper("TestBindings", "", new TestModule()))
    {
    // Setup the mock the dataprovider
    MyMocks.MockDataProvider.Setup(x => x.InsertUserProfile(It.IsAny<IUserProfile>())).Returns(1);

    IUserProfile up = new UserProfile();

    IUserProfileManager manager = new UserProfileManager();
    int result = manager.Insert(up);
    Assert.AreEqual(1, result);
    MyMocks.MockDataProvider.Verify(x => x.InsertUserProfile(up), Times.Once());
    }
} 

我也在使用ninject。看来,因为我设定了返回值,真正被测试的是,这是一个笑话还是我遗漏了什么?

2 个答案:

答案 0 :(得分:0)

正在测试manager.Insert(up)返回1,我猜这是成功(或失败)的预期返回代码。然后我假设最后一行是验证你提供的模拟对象有一个插入它。这基本上测试以确保UserProfileManager正确传递和使用您提供的数据提供者的数据。

注意:为了使这个测试更好,我建议让模拟返回7,然后验证是否返回7。 UserProfileManager对象返回7的可能性较小,即它一直返回1。

答案 1 :(得分:0)

编写测试时,首先要让它按照您期望的方式运行代码(新代码的预期功能或当前行为)。 只有在那之后才能制作代码或修改测试以使事情通过。所以,如果这是你关于这个测试的主要问题,我建议你退后一步,问自己你真正想要测试的是什么。

您发布的代码更像是Integration Test而不是Unit Test,您要尝试做什么?您的评论建议您担心插入数据库,但您正在嘲笑某些对象。如果进行单元测试,我会惊讶地发现你手动初始化了这么多具体对象(例如UserProfileManager)。您的MockDataProvider实际进入执行路径的位置在哪里?