Вы не можете указать возвращаемое значение для теоретического теста, но вы можете добавить параметр, который действует как ожидаемое значение, и сравнить результаты теста с этим значением. В этом случае тест будет выглядеть следующим образом:
[Theory]
[MemberData(nameof(TestCases))]
public async Task Test(int i, double d, string str, bool expectedValue)
{
bool actualValue = DoStuffAsync(i, d, str);
Assert.True(actualValue == expectedValue);
}
Это сообщит платформе, если ожидаемое значение равно фактическому значению, полученному методом DoStuffAsyn c. Оператор Assert используется для оценки того, пройден или не пройден тест.
Еще один, возможно, гораздо более удобный в обслуживании подход - разделить один тест на два. В первом случае вы можете ожидать, что вывод метода будет истинным для каждого случая, а во втором вы можете ожидать, что результат будет ложным для каждого случая.
Первый тест должен выглядеть следующим образом
[MemberData(nameof(TestCasesTrue))]
public async Task TestTrue(int i, double d, string str)
{
bool actualValue = DoStuffAsync(i, d, str);
Assert.Equal(true, actualValue);
}
И второй тест должен выглядеть следующим образом:
[MemberData(nameof(TestCasesFalse))]
public async Task TestFalse(int i, double d, string str)
{
bool actualValue = DoStuffAsync(i, d, str);
Assert.Equal(false, actualValue);
}