Я получаю какое-то странное поведение в тесте, который я пишу, используя FluentAssertions. У меня есть следующий класс:FluentAssertions Должен содержать неудачу, когда он не должен
public class Die
{
Random rand;
public Die()
{
rand = new Random();
}
public Symbol Roll()
{
var symbols = Enum.GetValues(typeof(Symbol));
return (Symbol)symbols.GetValue(rand.Next(symbols.Length));
}
}
public enum Symbol
{
Success,
Failure
}
Я хочу сделать некоторые быстрые здравомыслие проверки, что я на самом деле создает кубик, который возвращает случайное значение, и не всегда то же самое значение. Таким образом, мой «быстрый и грязный» для TDD должен был опрокинуть его 100 раз и предположить, что он как минимум генерирует оба значения один раз. Тем не менее, я заметил, что когда я снизил число ниже (до 10), я получал некоторые неудачи, которых я не ожидал. Удаление его до 2 выглядело так:
[TestMethod]
public void Test_Die_Roll_Returns_Multiple_Values()
{
Die die = new Die();
Enumerable.Range(1, 2)
.Select((x) => die.Roll()).Should().Contain(Symbol.Success);
}
Иногда, когда я запускаю этот тест, он проходит. Иногда это терпит неудачу, конечно, когда коллекция {Failure, Failure}. Это ожидается. Однако иногда это происходит с сообщением вроде этого:
Сообщение: Ожидаемый набор {Успех, Сбой}, чтобы содержать Успех.
Что здесь происходит? Я сделал кое-что, и нашел много вещей о Содержаниях, используя ссылочные равны вместо значения равным. Желая двигаться дальше, я попытался это:
[TestMethod]
public void Test_Die_Roll_Returns_Multiple_Values()
{
Die die = new Die();
Enumerable.Range(1, 2)
.Select((x) => die.Roll()).Should().Contain(s => s.ToString().Equals("Success"));
}
Только иногда получить пропуск, и иногда получают:
сообщение: Коллекция {Успех, отказ} должен иметь элемент соответствия s.ToString() .equals ("Успех").
Что происходит?
Вы пытались добавить ToArray() за Select()? Потому что теперь вы передаете дерево выражений в Should(). –
Нет, я этого не делал, и похоже, что он работает так, как я ожидал. Я действительно не понимаю, почему то, что я делал, раньше работало. – jtheis