Да, вы можете, но вы должны добавить дополнительный код в ваш тест. Каждый оператор Assert в xUnit выдает исключение, если завершение не удается. Так что в случае Assert.True он генерирует исключение TrueException. Так что вы могли бы сделать что-то вроде:
[Fact]
public void MultipleAssertTest()
{
bool passesValidation = true;
passesValidation = PassesAssert(true == true);
passesValidation = PassesAssert(false == true);
passesValidation = PassesAssert(5 == 1);
Assert.True(passesValidation);
}
private bool PassesAssert(bool expression)
{
try
{
Assert.True(expression);
return true;
}
catch
{
return false;
}
}
Это позволит вам выполнить все ваши утверждения и полностью выполнить тест. Однако это не очень полезно, так как вы не знаете, что не так. Ниже показано, что было бы лучше, чтобы вы могли получить результаты теста, чтобы знать, какие элементы не пройдены.
private StringBuilder resultMsg;
[Fact]
public void MultipleAssertTest()
{
bool passesValidation = true;
resultMsg = new StringBuilder();
passesValidation = PassesAssert(true == true, "True True test");
passesValidation = PassesAssert(false == true, "False True test");
passesValidation = PassesAssert(5 == 1, "5==1 Test");
Assert.True(passesValidation, resultMsg.ToString());
}
private bool PassesAssert(bool expression, string message)
{
try
{
Assert.True(expression, message);
return true;
}
catch (AssertException ex)
{
resultMsg.Append(ex.UserMessage);
resultMsg.Append(Environment.NewLine);
return false;
}
}
Конечно, это требует немного больше работы, но позволяет блокировать все ваши Активы вместе. Таким способом вы можете обернуть любой из ваших тестовых методов Assert. Таким образом, вы могли бы сказать, что вы расширяете xUnit для обеспечения безотказного процесса Assert.
Надеюсь, это поможет.
РЕДАКТИРОВАТЬ: Согласно комментариям, чтобы это работало, вам нужно будет использовать оператор &, так как последующие вызовы будут перезаписывать значение.