falls dies nicht der richtige Bereich sein sollte, gerne verschieben.
Ich habe eine Library für die API von TMDB geschrieben in .NET 6.
API Doku ist hier zu finden.
Dabei nutze ich Refit um die Requests zu senden.
Für die Library würde ich gerne Tests schreiben um die Funktionalität der Library zu gewährleisten.
Ich nutze das Test Framework von Microsoft "MSTest".
Ich möchte gerne Wissen ob mein Vorgehen dabei das richtige ist.
Es gibt mehrere Endpunkte wo man Informationen holen kann, zB. von Filmen/Serien/Personen.
Da würde ich einen Test schreiben wo der Service authentifiziert ist und eine richtige Film Id übergibt. Sowie der Service nicht authentifiziert ist und eine Exception wirft und ich eine Id übergebe die nicht existiert.
Es gibt auch einen Endpunkt wo man Filme und Serien als Favorit markieren kann. Meine Library Implementation sieht wie folgt aus:
private async Task<Response> MarkAsFavoriteAsync(int accountId, int mediaId, AccountMediaType mediaType, bool favorite)
{
this.CheckAuthentication();
this.CheckSession();
MarkAsFavoriteRequest markAsFavoriteRequest = new(mediaType.GetString(), mediaId, favorite);
try
{
return this._authenticationType == AuthenticationType.ApiKey
? await this.AccountApi.MarkAsFavoriteAsync(accountId, this._sessionId!, markAsFavoriteRequest, this._token).ConfigureAwait(false)
: await this.AccountApi.MarkAsFavoriteAsync(accountId, this._sessionId!, markAsFavoriteRequest).ConfigureAwait(false);
}
catch (ApiException ex)
{
if(string.IsNullOrWhiteSpace(ex.Content))
{
return new();
}
return JsonSerializer.Deserialize<Response>(ex.Content) ?? new();
}
}
AccountApi ist das Interface um den API Call mittels Refit zu senden.
Die Methode wird von dieser hier aufgerufen:
public async Task<Response> MarkMovieAsFavoriteAsync(int accountId, int movieId, bool favorite)
{
return await this.MarkAsFavoriteAsync(accountId, movieId, AccountMediaType.Movie, favorite).ConfigureAwait(false);
}
Die 2. Methode ist in einem Interface angegeben und das Interface benutze ich in der Test Klasse.
Jetzt weiß ich nicht, wie ich diese Methode am besten teste.
Wenn ich einen Film als Favorit markiere, bekomme ich die Rückmeldung, dass ich den Film erfolgreich als Favorit markiert habe.
Sende ich den Request jetzt nochmal, bekomme ich die Rückmeldung, dass der Eintrag geupdated worden ist.
Müsste ich die Markierung nach dem Ende des Tests nicht zurücksetzen? Wie handhabt man das bei einer öffentlichen API?
Und wie teste ich das in diesem konkreten Fall am besten?
Das sind zwei Tests die ich für die Methode geschrieben habe:
[TestMethod]
[TestProperty(nameof(AccountService), nameof(AccountService_MarkMovieAsFavorite))]
[TestCategory(IntegrationTestCategoryName)]
public async Task AccountService_MarkMovieAsFavorite()
{
//Arrange
this._accountService.UseExistingSessionId(this.AccountSession!);
int movieId = 60735;
bool favorite = true;
bool success = true;
//Act
Response response = await this._accountService.MarkMovieAsFavoriteAsync(this.AccountId, movieId, favorite);
//Assert
Assert.IsNotNull(response);
Assert.AreEqual(success, response.Success);
}
[TestMethod]
[TestProperty(nameof(AccountService), nameof(AccountService_MarkMovieAsFavorite_InvalidValues))]
[TestCategory(IntegrationTestCategoryName)]
public async Task AccountService_MarkMovieAsFavorite_InvalidValues()
{
//Arrange
this._accountService.UseExistingSessionId(this.AccountSession!);
int movieId = 0;
bool favorite = true;
bool success = false;
//Act
Response response = await this._accountService.MarkMovieAsFavoriteAsync(this.AccountId, movieId, favorite);
//Assert
Assert.IsNotNull(response);
Assert.AreEqual(success, response.Success);
}
Schönen Abend noch!
René