단위 테스트가 아닌 통합 테스트 작성

게으른 소프트웨어 엔지니어로서 저는 필요할 때만 코드를 작성하고 싶습니다. 코드를 작성하게 된다면 최대한 활용하고 싶습니다. 이것이 당신과 같다면 통합 테스트를 통해 코드를 보다 효율적으로 만들 수 있는 방법을 살펴보겠습니다.

너무 길어서 읽을 수 없음



충분한 시간이 있거나 시스템의 중요한 부분일 때 통합 및 단위 테스트를 모두 작성하십시오. 시간이 없을 때 먼저 통합 테스트를 작성하십시오.

더…



Integration test — is a type of software testing in which the different units, modules or components of a software application are tested as a combined entity.



단위 테스트는 한 단위의 올바른 작업을 증명합니다. 반면 통합 테스트는 둘 이상의 단위 작업을 증명합니다.

테스트 중인 시스템



System Under Test가 무엇인지 이해하는 것이 왜 중요합니까? 효율적인 테스트를 정의하는 데 도움이 됩니다.

System under test (SUT) — system that is being tested for correct operation.



통합 테스트가 단위 테스트보다 더 넓은 SUT를 다루는 것은 정상입니다. 다음 테스트를 살펴보겠습니다.

[Fact]
public async void IntegrationTest()
{
    var client = new HttpClient();
    var model = new Model();

    var result = await client.PostAsync(_url, new StringContent(JsonConvert.SerializeObject(model)));
    var expectedModel = JsonConvert.DeserializeObject<Model>(await result.Content.ReadAsStringAsync());

    var response = await client.GetAsync($"{_url}/{expectedModel.Id}");
    var actualModel = JsonConvert.DeserializeObject<Model>(await result.Content.ReadAsStringAsync());

    Assert.Equal(expectedModel.Id, actualModel.Id);
    Assert.Equal(expectedModel.Name, actualModel.Name);
}


위 테스트의 SUT는 웹 서비스(컨트롤러, 서비스, 리포지토리 및 데이터베이스)에서 요청의 전체 여정입니다. 주장에 따라 이 웹 서비스의 모든 계층에서 잠재적인 문제를 포착할 수 있습니다.



웹 서비스에서 단위 테스트가 컨트롤러를 찾는 방법은 다음과 같습니다.

[Fact]
public async void UnitTest()
{
    var serviceMock = new Mock<IService>();
    serviceMock.Setup(p => p.MyServiceMethod()).Returns(true);
    var controller = new MyController(serviceMock);

    var model = new Model();
    var expectedModel = controller.MyControllerMethod(model);

    Assert.Equal(1, expectedModel.Id);
    Assert.Equal("Expected Name", expectedModel.Name);
}


위 테스트의 SUT는 하나의 레이어(컨트롤러)입니다.



보시다시피 통합 테스트는 비슷한 양의 코드로 단위 테스트보다 더 넓은 SUT를 다룹니다.

결론



적절한 통합을 작성하는 것은 초기 설정이 필요하기 때문에 어렵습니다. 그러나 시간이 지나면 보상을 받습니다. 처음에 시간을 투자하고 나중에 코드에 대한 안정감을 얻으십시오.

통합 테스트를 작성하고 있는지 확인하는 방법은 다음과 같습니다.

🗄️ 데이터베이스의 테스트 인스턴스, 외부 종속성 등의 테스트 테넌트를 사용합니다.

🖥️ 조롱하고 찌르는 대신 테스트 서버를 사용하십시오.

🐳 보다 쉬운 종속성 관리를 위해 Docker를 사용하십시오.

자원


  • 통합 테스트의 내example. 실행 방법에 대한 지침은 README를 참조하십시오.
  • 멋진 다이어그램 편집기를 발견했습니다: Mermaid digram editor .
  • 좋은 웹페이지 즐겨찾기