

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# AWS Lambda pengujian fungsi di C \#
<a name="dotnet-csharp-testing"></a>

**catatan**  
Lihat bagian [ Fungsi pengujian ](testing-guide.md) untuk pengenalan lengkap teknik dan praktik terbaik untuk menguji solusi tanpa server. 

 Menguji fungsi tanpa server menggunakan jenis dan teknik pengujian tradisional, tetapi Anda juga harus mempertimbangkan pengujian aplikasi tanpa server secara keseluruhan. Cloud-based pengujian memberikan ukuran kualitas yang ** paling akurat ** dari fungsi Anda dan aplikasi tanpa server. 

 Arsitektur aplikasi tanpa server mencakup layanan terkelola yang menyediakan fungsionalitas aplikasi penting melalui panggilan API. Untuk alasan ini, siklus pengembangan Anda harus mencakup pengujian otomatis yang memverifikasi fungsionalitas ketika fungsi dan layanan Anda berinteraksi. 

 Jika Anda tidak membuat pengujian berbasis cloud, Anda dapat mengalami masalah karena perbedaan antara lingkungan lokal dan lingkungan yang digunakan. Proses integrasi berkelanjutan Anda harus menjalankan pengujian terhadap rangkaian sumber daya yang disediakan di cloud sebelum mempromosikan kode Anda ke lingkungan penerapan berikutnya, seperti QA, Staging, atau Produksi. 

 Lanjutkan membaca panduan singkat ini untuk mempelajari tentang strategi pengujian untuk aplikasi tanpa server, atau kunjungi repositori Sampel Pengujian [ Tanpa Server ](https://github.com/aws-samples/serverless-test-samples) untuk mempelajari contoh-contoh praktis, khusus untuk bahasa dan runtime pilihan Anda. 

 ![Illustration showing the relationship between types of tests.](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/test-type-illustration2.png) 

 Untuk pengujian tanpa server, Anda masih menulis * unit*, * integrasi, * dan * pengujian * ujung ke ujung. 
+ **Tes unit ** - Pengujian yang berjalan terhadap blok kode yang terisolasi. Misalnya, memverifikasi logika bisnis untuk menghitung biaya pengiriman yang diberikan item dan tujuan tertentu.
+ **Tes integrasi ** - Pengujian yang melibatkan dua atau lebih komponen atau layanan yang berinteraksi, biasanya di lingkungan cloud. Misalnya, memverifikasi fungsi memproses peristiwa dari antrian.
+ **End-to-end pengujian ** - Pengujian yang memverifikasi perilaku di seluruh aplikasi. Misalnya, memastikan infrastruktur diatur dengan benar dan bahwa peristiwa mengalir antar layanan seperti yang diharapkan untuk mencatat pesanan pelanggan.

## Menguji aplikasi tanpa server
<a name="dotnet-csharp-testing-techniques-for-serverless-applications"></a>

 Anda biasanya menggunakan campuran pendekatan untuk menguji kode aplikasi tanpa server Anda, termasuk pengujian di cloud, pengujian dengan tiruan, dan kadang-kadang pengujian dengan emulator. 

### Pengujian di cloud
<a name="dotnet-csharp-testing-in-the-cloud"></a>

 Pengujian di cloud sangat berharga untuk semua fase pengujian, termasuk pengujian unit, pengujian integrasi, dan pengujian ujung ke ujung. Anda menjalankan pengujian terhadap kode yang digunakan di cloud dan berinteraksi dengan layanan berbasis cloud. Pendekatan ini memberikan ** ukuran kualitas kode Anda yang ** paling akurat. 

 Cara mudah untuk men-debug fungsi Lambda Anda di cloud adalah melalui konsol dengan acara pengujian. A * cara pengujian * adalah input JSON ke fungsi Anda. Jika fungsi Anda tidak memerlukan input, acara dapat berupa dokumen JSON kosong`({})`. Konsol menyediakan acara sampel untuk berbagai integrasi layanan. Setelah membuat acara di konsol, Anda dapat membagikannya dengan tim Anda untuk membuat pengujian lebih mudah dan konsisten. 

**catatan**  
[Menguji fungsi di konsol ](testing-functions.md) adalah cara cepat untuk memulai, tetapi mengotomatiskan siklus pengujian Anda memastikan kualitas aplikasi dan kecepatan pengembangan. 

### Alat pengujian
<a name="dotnet-csharp-testing-tools"></a>

Untuk mempercepat siklus pengembangan Anda, ada sejumlah alat dan teknik yang dapat Anda gunakan saat menguji fungsi Anda. Misalnya, mode [AWS SAM Ac ](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/using-sam-cli-sync.html) celer [AWS CDK ate dan watch ](https://docs.aws.amazon.com/cdk/v2/guide/cli.html#cli-deploy-watch) keduanya mengurangi waktu yang diperlukan untuk memperbarui lingkungan cloud.

Cara Anda mendefinisikan kode fungsi Lambda membuatnya mudah untuk menambahkan pengujian unit. Lambda memerlukan konstruktor publik tanpa parameter untuk menginisialisasi kelas Anda. Memperkenalkan konstruktor internal kedua memberi Anda kontrol atas dependensi yang digunakan aplikasi Anda.

```
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]

namespace GetProductHandler;

public class Function
{
    private readonly IDatabaseRepository _repo;
    
    public Function(): this(null)
    {
    }
    
    internal Function(IDatabaseRepository repo)
    {
        this._repo = repo ?? new DatabaseRepository();
    }
    
    public async Task<APIGatewayProxyResponse> FunctionHandler(APIGatewayProxyRequest request)
    {
        var id = request.PathParameters["id"];
        
        var databaseRecord = await this._repo.GetById(id);
        
        return new APIGatewayProxyResponse 
        {
            StatusCode = (int)HttpStatusCode.OK,
            Body = JsonSerializer.Serialize(databaseRecord)
        };
    }
}
```

Untuk menulis tes untuk fungsi ini, Anda dapat menginisialisasi instance baru `Function` kelas Anda dan meneruskan implementasi yang diejek dari. `IDatabaseRepository` Contoh di bawah ini menggunakan `XUnit``Moq`,, dan `FluentAssertions` untuk menulis tes sederhana memastikan pengem `FunctionHandler` balian kode status 200.

```
using Xunit;
using Moq;
using FluentAssertions;

public class FunctionTests
{
    [Fact]
    public async Task TestLambdaHandler_WhenInputIsValid_ShouldReturn200StatusCode()
    {
        // Arrange
        var mockDatabaseRepository = new Mock<IDatabaseRepository>();
        
        var functionUnderTest = new Function(mockDatabaseRepository.Object);
        
        // Act
        var response = await functionUnderTest.FunctionHandler(new APIGatewayProxyRequest());
        
        // Assert
        response.StatusCode.Should().Be(200);
    }
}
```

Untuk contoh yang lebih rinci, termasuk contoh pengujian asinkron, lihat repositori [ sampel pengujian ](https://github.com/aws-samples/serverless-test-samples/tree/main/dotnet-test-samples) .NET di. GitHub