테스트 제어 Azure 함수 C 개발 # 섹션 3: 통합 테스트
10479 단어 csharpazureserverlessdotnet
단원 테스트는 우리가 피라미드를 테스트하는 기초를 구성하지만 TDD가 완성한 측면에서 볼 때 그것들은 아직 부족하다.
다음 단계에서는 Azure 기능을 위한 통합 테스트를 실시합니다.
이 시리즈의 기타 게시물
sntnupl / azure 함수 예제 unittest integrationtest
Azure 기능 어플리케이션에 대한 유닛 및 통합 테스트를 구현하는 방법을 보여주는 예제 어플리케이션
이 기사의 관련 코드는 청구(Processor) 아래에 있습니다.시험이 저장소의 통합 항목입니다.
image source
이러한 통합 테스트와 셀 테스트를 구분하는 몇 가지 특징:
IBinder
을 읽는 것을 비웃지 않습니다. 실제 Blob 스토리지인 IAsyncCollector
을 비웃지 않습니다.우리는 Azure 함수를 사용하여 기록된 실제 테이블 저장소를 사용하고, 이 실제 테이블 저장소를 읽어서 이 기록을 검증할 것입니다.이러한'배경 작업'을 상세하게 소개하기 전에 우리는 먼저 몇 가지 개념을 이해하자.
Azure WebJobs SDK 및 Azure 기능과의 관계
Azure Functions 응용 프로그램을 실행하면 콘솔 응용 프로그램이 시작됩니다.
그러나 실제'기능'은 스스로 운행할 수 없고, 사건 촉발기를 신기하게 감청할 수 없다. 이것은 마력이 없는 것이다.이벤트 트리거를 감지하고 Azure 함수를 실행할 수 있는 실행 용기가 필요합니다.
호스트에서 Azure Functions 애플리케이션을 시작하고 해당 주기를 관리합니다.또한 Azure Function 응용 프로그램에 대한 종속성 주입, 로깅 및 구성을 설정합니다.
이 호스트는 Azure WebJobs SDK의
JobHost
클래스를 통해 구현됩니다(소스 코드 here).Azure 함수는 Azure WebJobs SDK package에 구축되어 있으며 이 JobHost
클래스를 사용할 수 있습니다.물론, 우리가 Azure Function 프로그램을 실현하고, 심지어는 그것을 실행할 때,
JobHost
과 관련된 모든 세부 사항은 우리에게서 추상화될 것이다.Azure Functions 프로젝트에서는
host.json
파일을 통해서만 호스트에 액세스할 수 있습니다.가능한 모든 호스트 설정의 전체 참조는 호스트를 통해 조정할 수 있습니다.json은 at this link에서 얻을 수 있습니다.따라서 우리가 이러한 관계를 이해하게 되면 통합 테스트 환경을 설정하기 위해
이러한 지식을 통해 우리는 우리의 통합 테스트 프로젝트를 완성할 수 있다.
Note: All code discussed in the following sections is in the InvoiceProcessor.Tests.Integration Project.
설계 통합 테스트
통합 테스트의 SUT는
InvoiceWorkitemEventHandler
클래스의 Azure 함수입니다.이 함수에는 기본적으로 세 가지 기능이 있습니다.새로운 메시지가 특정 Azure 서비스 버스 항목에 도달하면
따라서 우리의 통합 테스트는
그러나, 이 작업을 수행하기 전에, 우리의 테스트는 이전에 실행된 테스트의 모든 부품을 제거해야 한다.다시 말하면 다음과 같은 것이 필요하다.
EndToEndTestFixture
류다.우리는 이 클래스에서 Class Fixture 모드를 이용하여 테스트 상하문을 만들 수 있습니다. 이 상하문은
ValidInvoiceTests
테스트 세트의 모든 테스트에서 공유됩니다.이 클래스는 xUnit의
IAsyncLifetime
인터페이스를 계승하여 비동기 설정 작업 during its initialization을 수행할 수 있도록 합니다.통합 테스트 작성
배정 부분
[Fact]
public async Task ValidInvoiceUploaded_GetsParsedAndSavedToTableStorage()
{
string blobPath = await _testFixture.UploadSampleValidInvoice();
// ...
}
다른 작업을 수행하기 전에 청구서 샘플 파일을 Azure Blob 저장소에 업로드하고 있습니다.[Fact]
public async Task ValidInvoiceUploaded_GetsParsedAndSavedToTableStorage()
{
// ...
IHost host = new HostBuilder()
.ConfigureWebJobs()
.ConfigureDefaultTestHost<InvoiceWorkitemEventHandler>(webjobsBuilder => {
webjobsBuilder.AddAzureStorage();
webjobsBuilder.AddServiceBus();
})
.ConfigureServices(services => {
services.AddSingleton<INameResolver>(resolver);
})
.Build();
using (host) {
await host.StartAsync();
// ..
}
// ...
}
이것은 Azure 기능이 포함된 호스트를 설정하는 부분입니다.구체적으로 말하면, 우리는
ConfigureDefaultTestHost<InvoiceWorkitemEventHandler>()
조수 방법을 사용하여 호스트가 InvoiceWorkitemEventHandler
클래스에서 Azure 함수를 찾도록 알려 주었다.Azure 스토리지(
AddAzureStorage()
)와 ServiceBus(AddServiceBus()
) 확장도 초기화했습니다. SUT에서 두 가지 확장을 사용했기 때문입니다.호스트를 생성한 후, 우리는
StartAsync()
을 호출해서 호스트를 시작합니다.Act 섹션
public async Task ValidInvoiceUploaded_GetsParsedAndSavedToTableStorage()
{
// ...
using (host) {
// ...
await _testFixture.SendInvoiceWorkitemEvent(blobPath);
// ...
}
}
여기서, 우리는 영수증 파일의 위치를 업로드하는 메시지를 만들고, 이를 Azure 서비스 버스 테마에 보냅니다.이 메시지를 전송하면 SUT가 트리거되고 모든 것이 순조롭게 진행되면 Azure 테이블 저장소는 해당하는 항목을 사용하여 업데이트됩니다.
단언 부분
public async Task ValidInvoiceUploaded_GetsParsedAndSavedToTableStorage()
{
// ...
using (host) {
// ...
List<AcmeOrderEntry> parsedOrders = await _testFixture.WaitForTableUpdateAndGetParsedOrders();
_output.WriteLine($"Found {parsedOrders.Count} invoices.");
Assert.True(parsedOrders.Count == 2);
}
}
여기에서, 우리는 항목이 표 저장소에 업로드되기를 기다리고, 두 항목을 만들었다고 단언한다. (우리의 예시 영수증은 두 항목을 포함한다.)Unit 테스트를 실행하는 것과 마찬가지로 VisualStudio의 테스트 리소스 관리자를 사용하여 통합 테스트를 수행할 수도 있습니다.
요약
이 일련의 글에서 우리는 Azure 함수의 테스트 구동 개발을 어떻게 효과적으로 집행하는지 보았다.
개발자들이 Azure 기능 측면에서 이 점을 걱정하는 것을 자주 본다.
이러한 기능은 Azure Blob 스토리지, Azure 서비스 버스 등 외부 엔티티를 트리거하는 것과 관련된다는 사실에 따라 개발자들은 Unit/Integration 테스트 Azure 기능이 복잡한 작업이 될 것이라고 믿습니다.
우리가 이 일련의 게시물에서 본 바와 같이, 이런 관점은 반드시 정확한 것은 아니다.
이 시리즈는 Azure functions 응용 프로그램에서 TDD를 받아들일 수 있도록 도와주고 더 높은 품질의 코드를 제공함으로써 더 좋은 개발자가 되도록 도와주길 바랍니다.
읽어주셔서 감사합니다!🙂
Reference
이 문제에 관하여(테스트 제어 Azure 함수 C 개발 # 섹션 3: 통합 테스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/sntnupl/test-driven-development-of-azure-functions-with-c-part-3-integration-tests-5116텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)