Bonjour,
Je suis occupé de faire des tests avec des méthodes async
J'utilise xUnit

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
//Constructeur
public  myObjTest(Database db){
    // service de gestion de la table
    dbObjService = db.objService
    //creation de mes 2 obj => en réalité créé ailleur mais bien présent dans la db après creation
    await dbMyObjService.AddAsync(new() { Id = 1, Serial = "ABCD" })); 
    await dbMyObjService.AddAsync(new() { Id = 2, Serial = "DEFG" })); 
    await dbMyObjService.AddAsync(new() { Id = 3, Serial = "1234" })); 
    await dbMyObjService.AddAsync(new() { Id = 4, Serial = "5678" })); 
}
 
//UPDATE TEST
[Fact]
public async Task UpdateObjTest()
{
    var myObj = await dbMyObjService.GetByIdAsync(1);
    // change name to the same as Id 2
    myObj.Serial = "DEFG";
    // is throwing bcs serial must be unic
    await Assert.ThrowsAsync<Microsoft.EntityFrameworkCore.DbUpdateException>(() => dbMyObjService.UpdateAsync(myObj));
}
 
//DELETE TEST
[Theory]
[InlineData(7)]
[InlineData(8)]
public async Task DeleteObjTest(int objId)
{
    var obj = await dbMyObjService.GetByIdAsync(objId);
    Assert.True(await dbMyObjService.DeleteAsync(obj));
    Assert.Null(await dbMyObjService.GetByIdAsync(obj));
}
L'erreur est détecté par le gestionnaire de tests dans la methode Delete

error throw "Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while updating the entries. See the inner exception for details."MySql.Data.MySqlClient.MySqlException Duplicate entry 'DEFG' for key 'sr_radcam_nk7_main.sr_radcam_nk7_main_Serial_uindex'
Mais j'ai le sentiment qu'entre le test update & le delete le buffer d'erreurs sql n'est pas vidé.
Comment dois-je donc faire pour tester un throw dans l'update tout en fessant en sorte que le delete continue de fonctionner?

L'exécution des tests lancés individuellement ne rapportent pas d'erreur.
Pourquoi exécutés à la suite, l'erreur est-elle alors déclenché?

Merci d'avance


Ajout:Je me suis dis au début que j'avais mal écris ma fonction anonyme
donc j'ai modifié ceci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
 
//UPDATE TEST
[Fact]
public async Task UpdateObjTest()
{
    var myObj = await dbMyObjService.GetByIdAsync(1);
    // change name to the same as Id 2
    // is throwing bcs serial must be unic
    await Assert.ThrowsAsync<Microsoft.EntityFrameworkCore.DbUpdateException>(async () => {
        myObj.Serial = "DEFG";
        await dbMyObjService.UpdateAsync(myObj);
    });
}
Mais j'obtiens toujours la même erreur