C# 如何使用JustMock-lite和MSTest对delete方法进行单元测试?
我刚刚开始单元测试,现在一直在为delete编写测试方法。我正在使用MStest和JuckMock。我的测试方法如下。我们的想法不是使用真实的存储库,而是使用JustMock来模拟一个存储库,但是在代码中,我得到了updatedCustomer的一个值,测试方法失败了。希望有人能给我指出正确的方向C# 如何使用JustMock-lite和MSTest对delete方法进行单元测试?,c#,unit-testing,mstest,justmock,C#,Unit Testing,Mstest,Justmock,我刚刚开始单元测试,现在一直在为delete编写测试方法。我正在使用MStest和JuckMock。我的测试方法如下。我们的想法不是使用真实的存储库,而是使用JustMock来模拟一个存储库,但是在代码中,我得到了updatedCustomer的一个值,测试方法失败了。希望有人能给我指出正确的方向 [TestMethod] public void ShouldDeleteCustomerWithIdParam() { var repo = Mock.Cre
[TestMethod]
public void ShouldDeleteCustomerWithIdParam()
{
var repo = Mock.Create<ICustomerRepository>();
var customerService = new CustomerService(repo);
var customer = Mock.Create<Customer>();
customerService.Delete(customer.Id);
var updatedCustomer = _customerService.Get(customer.Id);
Assert.IsNull(updatedCustomer, "customer hasn't been deleted");
}
[TestMethod]
public void应删除CustomerWithidparam()
{
var repo=Mock.Create();
var customerService=新客户服务(repo);
var customer=Mock.Create();
customerService.Delete(customer.Id);
var updatedCustomer=\u customerService.Get(customer.Id);
IsNull(updatedCustomer,“客户尚未被删除”);
}
您可以通过两种方式完成
断言已调用ICCustomerRepository上的相关方法。如果称为删除,则为:
Mock.Assert(() => repo.Delete(), Occurs.Once());
或者用假的。创建FakeCustomerRepository实现ICCustomerRepository。实现add方法以允许添加客户,并在测试中在其中设置客户。然后,delete方法只需要删除该客户
var repo = new FakeCustomerRepository();
repo.AddCustomer(1);
repo.AddCustomer(2);
var customerService = new CustomerService(repo);
customerService.Delete(1);
var deletedCustomer = _customerService.Get(1);
Assert.IsNull(updatedCustomer, "customer hasn't been deleted");
你可以用两种方法来做 断言已调用ICCustomerRepository上的相关方法。如果称为删除,则为:
Mock.Assert(() => repo.Delete(), Occurs.Once());
或者用假的。创建FakeCustomerRepository实现ICCustomerRepository。实现add方法以允许添加客户,并在测试中在其中设置客户。然后,delete方法只需要删除该客户
var repo = new FakeCustomerRepository();
repo.AddCustomer(1);
repo.AddCustomer(2);
var customerService = new CustomerService(repo);
customerService.Delete(1);
var deletedCustomer = _customerService.Get(1);
Assert.IsNull(updatedCustomer, "customer hasn't been deleted");
您的测试似乎使用了两种不同的
CustomerService
:一种是在测试内部创建的CustomerService
,另一种是在测试外部创建的\u CustomerService
除此之外,由于您希望模拟存储库,因此仅使用它来断言预期结果会更容易。也就是说,您实际上不想执行删除操作,然后尝试检索已删除的客户-您只想验证customerService
是否在提供的存储库上调用了正确的方法
例如:
[TestMethod]
public void ShouldDeleteCustomerWithIdParam()
{
var testID = "A test ID";
var repo = Mock.Create<ICustomerRepository>();
var customerService = new CustomerService(repo);
customerService.Delete(testID);
Mock.Assert(() => repo.DeleteCustomer(testID), Occurs.AtLeastOnce());
}
[TestMethod]
public void应删除CustomerWithidparam()
{
var testID=“测试ID”;
var repo=Mock.Create();
var customerService=新客户服务(repo);
customerService.Delete(testID);
Assert(()=>repo.DeleteCustomer(testID),Occurs.AtLeastOnce();
}
您的测试似乎使用了两种不同的CustomerService
s:一种是在测试内部创建的CustomerService
,另一种是在测试外部创建的\u CustomerService
除此之外,由于您希望模拟存储库,因此仅使用它来断言预期结果会更容易。也就是说,您实际上不想执行删除操作,然后尝试检索已删除的客户-您只想验证customerService
是否在提供的存储库上调用了正确的方法
例如:
[TestMethod]
public void ShouldDeleteCustomerWithIdParam()
{
var testID = "A test ID";
var repo = Mock.Create<ICustomerRepository>();
var customerService = new CustomerService(repo);
customerService.Delete(testID);
Mock.Assert(() => repo.DeleteCustomer(testID), Occurs.AtLeastOnce());
}
[TestMethod]
public void应删除CustomerWithidparam()
{
var testID=“测试ID”;
var repo=Mock.Create();
var customerService=新客户服务(repo);
customerService.Delete(testID);
Assert(()=>repo.DeleteCustomer(testID),Occurs.AtLeastOnce();
}
简短的回答和较长的回答:)
正如@Lilshieste所指出的,您使用的是两个不同的存储库对象。您的客户对象将从其中一个客户对象中删除,然后尝试从另一个客户对象中检索,可能根本没有添加到另一个客户对象中
您可能想再看看您在这里测试的内容。假设CustomerService
是CustomerRepository
的一个相当薄的包装,那么一旦完成,这个测试真正要做的就是通过CustomerService.Delete
运行代码,并检查它调用CustomerRepository.Delete
。这有两个问题:
CustomerService
无关的内容Jimmy Bogard写了一篇关于单元测试存储库的文章。一个简短的答案和一个较长的答案:) 正如@Lilshieste所指出的,您使用的是两个不同的存储库对象。您的客户对象将从其中一个客户对象中删除,然后尝试从另一个客户对象中检索,可能根本没有添加到另一个客户对象中 您可能想再看看您在这里测试的内容。假设
CustomerService
是CustomerRepository
的一个相当薄的包装,那么一旦完成,这个测试真正要做的就是通过CustomerService.Delete
运行代码,并检查它调用CustomerRepository.Delete
。这有两个问题:
CustomerService
无关的内容