Так что я считаю себя писать этот код все время:Как создать метод, который принимает лямбда-выражение
[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");
}
}
Таким образом, вместо того, чтобы писать этот код снова и я бы очень хотел, чтобы создать метод, который принимает выражение Lambda, которое будет выполнять метод в блоке try.
Что-то вроде этого:
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)));
}
}
Так что я могу сделать что-то вроде этого:
var provider = new MembershipServiceProvider();
AssertExpectedException(provider => provider.ResetPassword(null));
Я действительно не уверен, если это находится на правильном пути, но, надеюсь, кто-то может указать меня в правильном направлении.
Thanks
Отлично! Большое спасибо. – devlife
Как выполнить действие с параметром? –
devlife
Извините за форматирование .... Если у меня есть это: общественного недействительными AssertExpectedException (Действие theAction) где TException: Исключение { theAction(); // Это не работает. } AssertExpectedException (а => a.DoSomething ("тест", 123);. theAction() не работает Мне нужно пройти по двум параметрам Как бы я. сделать это с действием , который передается в что-то вроде этого (хотя это не будет реально работать :-)): theAction (theAction.FirstParameter, theAction.SecondParameter) –
devlife