FluentAssertions ShouldNotThrow est pas reconnu pour une méthode async/Func
Je suis en train de vérifier une méthode asynchrone jette béton exception.
Pour que je suis à l'aide de MSTEST et FluentAssertions 2.0.1.
J'ai vérifié ce Discussion sur Codeplex et de voir comment il fonctionne avec async-exception à des méthodes un autre lien sur FluentAssertions async tests:
Après un tout en essayant de travailler avec ma "production" de code, j'ai éteint la Fluentassertions faux aync classe et mon code résultant est comme ça (mettre ce code à l'intérieur d'un [TestClass]
:
[TestMethod]
public void TestThrowFromAsyncMethod()
{
var asyncObject = new AsyncClass();
Action action = () =>
{
Func<Task> asyncFunction = async () =>
{
await asyncObject.ThrowAsync<ArgumentException>();
};
asyncFunction.ShouldNotThrow();
};
}
internal class AsyncClass
{
public async Task ThrowAsync<TException>()
where TException : Exception, new()
{
await Task.Factory.StartNew(() =>
{
throw new TException();
});
}
public async Task SucceedAsync()
{
await Task.FromResult(0);
}
}
Le problème est que ShouldNotThrow
n'est pas valide:
ShouldNotThrow méthode n'est pas reconnue par le code. Si j'essaie d'
compiler, il me donne cette erreur:
'Système.Func' ne contient pas de
définition des "ShouldNotThrow" et la meilleure méthode d'extension de surcharge
'FluentAssertions.AssertionExtensions.ShouldNotThrow(Système D'.Action,
string, params object[])' a certains arguments non valides
Grâce.
SOLUTION
2.0.1 FA version ne prend pas en charge cette ShouldNotThrow
fonctionnalité et il sera inclus dans la prochaine reléase 2.1 (à proximité de la semaine prochaine).
Remarque: ShouldThrow est déjà pris en charge dans 2.0.1 versión.
- Je ne sais rien à propos de FluentAssertions, mais l'exception, dit que ShouldNotThrow est définie uniquement pour les
Action
et pasFunc
. - Ce qui signifie que FluentAsseritions probablement ne prend pas en charge
async
. - FluentAssertions prend en charge asynchrone, si vous lisez le lien ci-dessus (lien), vous pouvez le voir. Et celui-ci pourrait l'aider: fluentassertions.codeplex.com/workitem/12148
- Ciblez-vous .NET 4.5 dans votre projet de test d'unité? Si oui, essayez de désinstaller FA et de le réinstaller.
- La cible est .NET 4.5 FluentAssertions est Nuget gérés et à l'exécution de la version de propriété est: v4.0.30319
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas besoin de la mesure globale. Qui est utilisé dans les tests unitaires pour vérifier que l'API est en train de jeter de l'exception au droit. Cela devrait être suffisant:
Malheureusement, le ShoudlNotThrow() sur la touche Func est absent de .NET 4.5. J'ai corrigé cela dans la version 2.1 (actuellement dogfooding).
{}
bouton (ou manuellement tiret chaque ligne par quatre espaces si vous avez besoin de l'exercice).4.0.30319
et il se trouve déjà surnet45
dossier avec ce chemin d'accès complet:....\packages\FluentAssertions.2.0.1\lib\net45\FluentAssertions.dll
. Mais Pas deShouldNotThrow
est disponible.Si vous regardez AssertionExtensions.cs de la classe vous verrez que la ShouldNotThrow méthode d'extension sur la touche Func est définie uniquement pour les net45 ou winrt compilation des cibles.
Vérifier:
référencé FluentAssertions de la bibliothèque vers la droite.
Aussi après avoir fait cela, je pense que vous devez appeler la méthode d'action pour faire l'affirmation, sinon l'intérieur lambda ne sera pas appelé:
net45
dossier.