2017-12-19 5 views
1

제품 모델을 저장소에 삽입하는 논리가 있습니다. 논리 조각은 저장소에 서로 다른 데이터가있는 두 개의 제품 모델을 삽입 할 것이므로이 메서드는 각 제품에 한 번씩 두 번만 호출되도록 테스트해야합니다.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

UPDATE가

의견에 따라, 당신은 두 번 어설 호출 할 수 있습니다. 각 모델에 대해 한 번.

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

어설는 주장을 할 때 평등에 제공된 인수를 비교하는 것입니다.

가 사용을 고려 문서에서 Asserting Occurrence를 참조하는


원래 대답

, ... 위에 제공된 최소한의 예에서

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

,

두 제품을 추가하는 방법은 IProductRepo.AddProduct() 메서드라고합니다.

+0

이 접근 방식을 고려했지만 제품 모델 내부의 데이터가 수정되지 않았 음을 확인했습니다. 제품 모델의 속성을 확인하여 예상 한 값과 동일한 값을 확인하고 싶습니다. – Eritey

+0

@Eritey 그러면 assert를 두 번 호출 할 수 있습니다. 각 모델마다 하나씩. – Nkosi

관련 문제