2017-10-03 8 views
0

Sur ce lien here, une recommandation est faite sur la façon d'écrire une méthode async en C#, qui est:Quel test d'unité forcera à écrire le prochain code C# asynchrone?

using System.Threading.Tasks; 
... 
void Foo(){} 
... 
new Task(Foo).Start(); 

Ma question porte sur la façon d'appliquer une approche TDD à ce code, exactement: quel test unitaire Je devrais écrire pour forcer l'écriture du code précédent.

Merci :)

+0

Asynchrone (en particulier les méthodes qui accèdent à des ressources externes) doivent être écrites afin que vous puissiez consommer comme: ' attendre Foo() 'sans démarrer manuellement les tâches. – Fabio

+0

Pour forcer à écrire une fonction asynchrone, il suffit d'affirmer que la valeur de retour est de type 'Task' ou' Task ' – Fabio

+0

C'est une vieille question/réponse, (juste) avant async/await était disponible –

Répondre

0

Je pense que vous devez vous demander ce que vous êtes en train de tester? Dans l'exemple que vous avez fourni:

void Foo(){} 

Foo est juste une méthode de classe pour vous créer un test qui teste la fonctionnalité de Foo et il n'a rien à voir avec les tests d'écriture pour le code async.

Toutefois, si Foo avait un type de retour de Task ou Task<T>, vous pouvez procéder comme suit.

Étant donné la classe:

public class Bar 
{ 
    public Task<string> Foo() 
    { 
     Console.WriteLine("foo called"); 
     return Task.FromResult("123"); 
    } 
} 

Le test serait alors ressembler à:

[TestClass] 
public class BarTest 
{ 

    [TestMethod] 
    public async Task Test_Foo() 
    { 
     // Arrange 
     var bar = new Bar(); 

     // Act 
     var result = await bar.Foo(); 

     // Assert 
     Assert.AreEqual("123", result); 
    } 
}