我是嘲笑的新手,我对OOP概念有基本的了解。 接口中有一个方法可以将子存储代码添加到数据库中。 这个方法实现在我想要模拟的另一个类文件中。以下是方法。
public SubStore AddSubStoreCode(SubStore subStoreCode)
{
db.SubStores.Add(subStoreCode);
SaveStoreCodes();
return subStoreCode;
}
在测试类文件中,我设置了模拟对象和要处理的方法。我不知道如何继续该行为并断言部分完成Moq单元测试。以下是摘录
[TestMethod]
public void ShouldBeAbleToAddSubStoreCode()
{
//Arrange
var mockStoreCodeService = new Mock<IStoreCodeService>();
mockStoreCodeService.Setup(s => s.AddSubStoreCode(It.IsAny<SubStore>));
}
请告知
答案 0 :(得分:1)
IStoreCodeService
与AddSubStoreCode
是您正在测试的组件的依赖关系。您的测试缺少最重要的部分 - 正在测试的系统(到目前为止,您只是实例化并设置了依赖项)。
[TestMethod]
public void SomeMethod_ShouldAddSubStoreCode_ThroughService()
{
// Arrange:
// - create dependency and create instance of system under test (sut)
// - we don't need mock.Setup here; verification is made at the end
var mockStoreCodeService = new Mock<IStoreCodeService>();
var sut = new SomeComponent(mockStoreCodeService);
// Act: execute method on sut
sut.SomeMethod();
// Assert: verify expectations (that call has been made to service)
mockStoreCodeService.Verify(m => m.AddSubStoreCode(It.IsAny<SubStore>));
}
我们跳过了mock.Setup
因为在这样的测试中不需要它(我们验证我们的组件是否与其他组件通信;就像这里的情况一样)。
答案 1 :(得分:0)
请检查此链接。它对嘲弄有非常有用的解释。它可能会帮助你:
http://www.codeproject.com/Articles/30381/Introduction-to-Mocking
首先,您应该设置模拟存储库
private MockRepository _mocks;
[SetUp]
public void initialize()
{
_mocks = new MockRepository();
}
然后设定期望你应该这样做:
using (_mocks.Record())
{
SetupResult.For(averageJoeService.Authenticate(null,
null)).IgnoreArguments().Return(true);
}
其中Authenticate
是您希望在其案例中将其设为AddSubStoreCode
期待之后
The next part is the Playback which is the code that will trigger the expectations and produce the desired result. Here is the Playback part:
using (_mocks.Playback())
{
Assert.AreEqual(100,_accountBalanceService.GetAccountBalanceByUser(user));
}
GetAccountBalanceByUser是您要用来完成测试的第二个函数。