使用JustMock,我如何测试一个方法是否被调用两次并且传入不同的对象?

时间:2017-12-19 15:23:39

标签: c# tdd justmock

我有一条将产品模型插入存储库的逻辑。这条逻辑将插入两个具有不同数据的产品模型到存储库中,我需要测试这个方法只被调用两次,每个产品一次。

public interface IProductRepo
{
    void AddProduct(IProductModel productModel);
}

public class ProductFactory
{
    IProductRepo productRepository;

    public ProductFactory(IProductRepo productRepo)
    {
        this.productRepository = productRepo;
    }

    public void AddProduct(IProductModel productModel)
    {
        this.productRepository.AddProduct(productModel);
    }
}

[TestMethod]
public void test()
{
    IProductModel productOne = Mock.Create<IProductModel>();

    Mock.Arrange(() => productOne.Name).Returns("ProductOne");
    Mock.Arrange(() => productOne.Price).Returns(99);

    IProductModel productTwo = Mock.Create<IProductModel>();

    Mock.Arrange(() => productTwo.Name).Returns("ProductTwo");
    Mock.Arrange(() => productTwo.Price).Returns(10);

    IProductRepo productRepo = Mock.Create<IProductRepo>();

    ProductFactory factory = new ProductFactory(productRepo);

    factory.AddProduct(productOne);
    factory.AddProduct(productTwo);

    // Test to see that both of these products being added called the IProductRepo.AddProduct() method.
}

1 个答案:

答案 0 :(得分:1)

更新

基于注释,然后你可以调用断言两次。适用于每种型号。

Mock.Assert(() => productRepo.AddProduct(productOne), Occurs.Once());
Mock.Assert(() => productRepo.AddProduct(productTwo), Occurs.Once());

断言会在进行断言时比较提供的相等args。

原始回答

从文档中引用Asserting Occurrence

考虑使用......

Mock.Assert(() => productRepo.AddProduct(Arg.Any<IProductModel>()), Occurs.Exactly(2));

在上面提供的最小例子中,

  

看到这两个产品都被称为IProductRepo.AddProduct()方法。