첫 번째 사실은 단순히 mock을 만들고 mock을 호출하기 때문에 테스트에서 아무 것도 테스트하지 않는다는 것입니다.
조롱 프레임 워크가 광고되는대로 작동하는지 테스트하는 것입니다.
두 번째로 테스트는 순차적으로 테스트를 수행 할 수 있도록 비동기 적으로 만들 수도 있습니다. 일이 생각 무엇
는
[TestMethod]
[TestCategory("SeriesRepository")]
public async Task GetSeriesAsyncShouldReturnSeriesId12345() {
var repositoryMock = new Mock<ISeriesRepository>();
var seriesId = "12345";
var channel = 75864;
var mockSeries = new Mock<ISeries>();
mockSeries.Setup(_ => _.SeriesId).Returns(seriesId);
repositoryMock
.Setup(_ => _.GetSeriesAsync(seriesId, channel))
.ReturnsAsync(mockSeries.Object);
var result = await repositoryMock.Object.GetSeriesAsync(seriesId, channel);
result.SeriesId.Should().Be(seriesId);
}
당신은 몇 가지 원하는 동작
을 확인하기 위해 예상대로 작동하는 테스트에서 대상의 종속성을 조롱 우리는 클래스의 대상 방법을 테스트하고 싶었 말할 수 있다는 것입니다 . 예 테스트
public class SeriesService {
private readonly ISeriesRepository repository;
public SeriesService(ISeriesRepository repository
this.repository = repository;
}
public async Task<ISeries> GetSeries(string seriesId, int channel) {
var series = await repository.GetSeriesAsync(seriesId, channel);
//...do some other stuff
return series;
}
}
같은 뭔가 다음에서만 호출되고이 아닌 테스트 코드 발생하지 않을 조롱 방법을 호출 한 것으로 나타났습니다이
[TestMethod]
[TestCategory("SeriesRepository")]
public async Task TargetMethodShouldReturnSeriesId12345() {
//Assert
var repositoryMock = new Mock<ISeriesRepository>();
var seriesId = "12345";
var channel = 75864;
var mockSeries = new Mock<ISeries>();
mockSeries.Setup(_ => _.SeriesId).Returns(seriesId);
repositoryMock
.Setup(_ => _.GetSeriesAsync(seriesId, channel))
.ReturnsAsync(mockSeries.Object);
var target = new SeriesService(repositoryMock.Object);
//Act
var result = await target.GetSeries(seriesId, channel);
//Assert
result.Should().NotBeNull();
result.SeriesId.Should().Be(seriesId);
}
과 같을 것이다. 이 테스트에서 다루고있는 것으로 예상되는 코드 중 커버되지 않은 코드가 있습니까? –
* 단위 테스트 코드 *가 표시된대로 표시되지 않거나 실제 논리 코드 *가 적용되지 않는 이유는 무엇입니까? 전자의 경우 테스트가 실제로 실행되는지 확인하십시오. 후자의 경우 ** 어디에서 ** 실제 논리 코드를 호출하고 있습니까? 당신이 조롱을 취한 다음, 당신이 그것을 조롱했을 때 모의 행동을하는 것처럼 보입니다. 여기서 테스트 할 실제 논리 코드는 무엇입니까? –