2017-09-05 14 views
1

우리는 우리의 솔루션 테스트 범위에 대한 OpenCover을 사용하고 난어떤 일이 발생하지 않았는지 어떻게 확인합니까?

public async Task Build(ProcessorContext context) 
{ 
    context.ResultBetSlip.Bets.Clear(); 

    // Here OpenCover tells me that I need to cover two branches 
    // so I assume I need to verify that GetAvailablePlugins can be empty and 
    // no Build method was called. 
    // How do I do that? 
    foreach (var plugin in _pluginFactory.GetAvailablePlugins()) 
    { 
     await plugin.Build(context); 
    } 
} 

지금 내 테스트는 심지어 가능한 경우 이러한 경우 테스트를 고려해야

[Test] 
public async Task Build_ShouldntEnterForeachWhenThereAreNoPluginsRegistered() 
{ 
    // Arrange 
    var pluginFactoryMock = new Mock<IBetSlipProcessorServicePluginFactory>(); 
    var sut = new BetSlipProcessorService(pluginFactoryMock.Object); 
    pluginFactoryMock 
     .Setup(pf => pf.GetAvailablePlugins()) 
     .Returns(new List<IBetSlipProcessorServicePlugin>()); 

    // Act 
    await sut.Build(AutoFixtureSimplified.Create<ProcessorContext>()); 

    // Assert 
    ??? 
} 

과 같을 것이다 것으로 나타났습니다?

편집 :

이 요청으로 시험 범위 보고서입니다 :

enter image description here

그리고 여기 당신은 내가 이러한 범위를 달성하기 위해 할 수있는 모든 테스트의 요점을 찾을 수 있습니다. https://gist.github.com/kuskmen/df3f112b2b6d880741ee6ab559d64d53

+0

항목이있을 때 이미 테스트를 했습니까? – Nkosi

+0

예,하지만 'OpenCover'는 제가 거기에 하나 이상의 지점을 커버해야한다고 알려줍니다. – kuskmen

+0

그러면 GetAvailablePlugins가 호출되었는지 확인하십시오. – Nkosi

답변

1

조롱을 위해 Moq 프레임 워크를 사용한다고 가정합니다. 이 경우 두 가지 중 하나를 수행 할 수 있습니다.

  1. 당신은 엄격 모드에서 모의를 만들 수 있습니다
  2. 당신은 기대할 수있는 plugin.Build(..) 메소드가 예외가 발생되는 것을 호출 할 때 그.

    편집 How to verify that method was NOT called in Moq? : 난 당신이보고있는 정확한 시나리오를 시뮬레이션하고 난 당신이 이상 반복되는 데이터 유형으로 좁혀

비슷한 질문은 여기에 질문을 받았다. 목록을 사용하고 있기 때문에이 문제의 원인이되는 목록의 일부 내부 작업이있는 것 같습니다. 배열에 대한 모든 목록 참조를 변경했으며 분기 적용 범위가 예상대로 반환되었습니다.

+0

이것은 내가 생각하고있는 것이지만 바보가 아니다 ... 어디서나 그것을 사용하지 않고 그 방법을 확인하는 것이 아니라 ... 모호함을 느낀다. 그러나 이것은 유일한 방법이라고 생각한다. – kuskmen

+0

나는 ' OpenCover가 말하고있는 지사 범위에 익숙하지는 않지만 그렇다고 느낀다. 콜렉션이 비어있을 때'foreach'가 루프 블록을 실행하지 않는다는 것은 내재적이므로 그 경로를 테스트 할 필요가 없다고 생각합니다. –

+0

누락 된 테스트가 .GetAvailablePlugins()가 null을 반환 할 때가 될 수 있습니까? –