Je me retrouve à écrire ce code tout le temps:Comment créer une méthode qui accepte une expression lambda
[TestMethod]
[Description("Asserts that an ArgumentNullException is thrown if ResetPassword(null) is called")]
public void ResetPassword_Throws_ArgumentNullException_With_Null_Parameter()
{
try
{
new MembershipServiceProvider().ResetPassword(null);
}
catch (ArgumentNullException)
{
// ArgumentNullException was expected
Assert.IsTrue(true);
}
catch
{
Assert.Fail("ArgumentNullException was expected");
}
}
Ainsi, au lieu d'écrire ce code encore et je voudrais vraiment créer une méthode qui accepte une expression Lambda qui exécutera la méthode dans le bloc try.
Quelque chose comme ceci:
public void AssertExpectedException(Action theAction) where TException : Exception
{
try
{
// Execute the method here
}
catch (TException)
{
Assert.IsTrue(true);
}
catch
{
Assert.Fail(string.Format("An exception of type {0} was expected", typeof(TException)));
}
}
Je peux donc faire quelque chose comme ceci:
var provider = new MembershipServiceProvider();
AssertExpectedException(provider => provider.ResetPassword(null));
Je ne suis pas sûr que tout cela est sur la bonne voie, mais nous espérons que quelqu'un peut pointer moi dans la bonne direction.
Merci
Parfait! Merci beaucoup. – devlife
Comment exécutez-vous l'action avec un paramètre? –
devlife
Désolé pour la mise en forme .... Si j'ai ceci: publique vide AssertExpectedException (Action theAction) où TException: Exception { theAction(); // Cela ne fonctionne pas. } AssertExpectedException (a => a.DoSomething ("test", 123);. theAction() ne fonctionne pas je dois passer deux paramètres Comment pourrais-je. faire avec l'action qui est passé dans Quelque chose comme ça (bien que cela ne fonctionnerait pas en fait :-)): theAction (theAction.FirstParameter, theAction.SecondParameter) –
devlife