2016-11-02 5 views
0

Я пытаюсь проверить один из моих методов, видя, сколько результатов передается в мой Save method. Соответствующая строка:Как проверить, что список Count является определенным значением?

await paymentSampleRepository.Received() 
      .SaveSamplesAsync(Arg.Do<List<PaymentSamplePopulation>>(x => 
            Assert.Equal(sampleCount, x.Count()) 
          ), modifiedBy); 

Я, очевидно, не хватает что-то о том, как проверить это ... Как я могу проверить Count от того, что передается в SaveSamplesAsync

Это всегда показывает, как мимоходом. Я пробовал sampleCount и sampleCount + 1 в Assert, и они оба показывают как проходящие!

Если необходимо, я могу показать весь метод тестирования.

+0

Покажите [mcve], который воспроизводит проблему – Nkosi

ответ

1

Ссылка Actions with argument matchers

Предполагая следующее

public interface ILoader { 
    Task LoadAsync(List<int> data); 
} 

public class SystemUnderTest { 
    private readonly ILoader loader; 
    public SystemUnderTest(ILoader loader) { 
     this.loader = loader; 
    } 

    public async Task InvokeAsync(int count) { 
     var data = Enumerable.Range(1,count).ToList(); 
     await loader.LoadAsync(data); 
    } 

} 

тест будет выглядеть следующим образом

//Arrange 
var expected = 2; 
var actual = -1; 

var loader = Substitute.For<ILoader>(); 
loader.LoadAsync(Arg.Do<List<int>>(x => actual = x.Count); 

var sut = new SystemUnderTest(loader); 

//Act 
await sut.InvokeAsync(expected); 

//Assert 
Assert.Equal(expected, actual);