[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。看来,因为我设定了返回值,真正被测试的是,这是一个笑话还是我遗漏了什么?
答案 0 :(得分:0)
正在测试manager.Insert(up)返回1,我猜这是成功(或失败)的预期返回代码。然后我假设最后一行是验证你提供的模拟对象有一个插入它。这基本上测试以确保UserProfileManager正确传递和使用您提供的数据提供者的数据。
注意:为了使这个测试更好,我建议让模拟返回7,然后验证是否返回7。 UserProfileManager对象返回7的可能性较小,即它一直返回1。
答案 1 :(得分:0)
编写测试时,首先要让它按照您期望的方式运行代码(新代码的预期功能或当前行为)。 只有在那之后才能制作代码或修改测试以使事情通过。所以,如果这是你关于这个测试的主要问题,我建议你退后一步,问自己你真正想要测试的是什么。
您发布的代码更像是Integration Test而不是Unit Test,您要尝试做什么?您的评论建议您担心插入数据库,但您正在嘲笑某些对象。如果进行单元测试,我会惊讶地发现你手动初始化了这么多具体对象(例如UserProfileManager)。您的MockDataProvider
实际进入执行路径的位置在哪里?