MSTest - несколько утверждений из списка - PullRequest
0 голосов
/ 16 января 2011

Проблема: Я пытаюсь утверждать, что listOfExpressions правильный.

Я не знаю, в каком порядке будет возвращен список. Я использую MSTEST / VS2010 /C # 4

    [TestMethod]
    public void GetAnswersForResultIs47()
    {
        List<string> listOfExpressions = findArithmeticSymbolsInNumericOrder13579ThatGivesThisResult(47);
        foreach (string expression in listOfExpressions)
        {
            Assert.AreEqual("1*3+5*7+9", expression);
            Assert.AreEqual("-1-3*5+7*9", expression);
        }
    }

Ответы [ 3 ]

1 голос
/ 16 января 2011

Почему бы не иметь словарь ожидаемых выражений и выражение foreach, возвращаемое методом, который вы проверяете в словаре, чтобы они были и были только один раз.

Примерно так:

IDictionary<string, bool> CreateExpectedDictionary()
{
    IDcitionary<string, bool> expectedDictionary = new Dictionary<string, bool>();

    // Here add all the expressions you expect to be returned
    expectedDictionary.Add("1*3+5*7+9", false);
    expectedDictionary.Add("-1-3*5+7*9", false);

    return expectedDictionary ;
}

[TestMethod]
public void GetAnswersForResultIs47()
{
    List<string> listOfExpressions = findArithmeticSymbolsInNumericOrder13579ThatGivesThisResult(47);
    Dictionary<string, bool> expectedDic = CreateExpectedDictionary();

    foreach (string expression in listOfExpressions)
    {
         if(expectedDic.ContainsKey(expression))
         {
             if(expectedDic[expression])
             {
                 Assert.Fail(String.Format("The expression {0} was returned more than once.",expression));
             }

             expectedDic[expression] = true;
         }
         else
         {
             Assert.Fail(String.Format("The expression {0} was not expected", expression));  
         }
    }

    foreach(string exp in expectedDic.Keys)
    {
        if(!expectedDic[exp])
        {
            Assert.Fail(String.Format("The expression {0} is missing.", exp));
        }
    }
}   
0 голосов
/ 18 июня 2012

Поскольку вы не уверены в порядке, используйте CollectionAssert.AreEquivalent.

Проверяет, что указанные коллекции эквивалентны. Два коллекции эквивалентны, если они имеют одинаковые элементы в одном и том же количество, но в любом порядке. Элементы равны, если их значения равно, если они ссылаются на один и тот же объект.

Например:

    [TestMethod]
    public void GetAnswersForResultIs47()
    {
        List<string> listOfExpressions = findArithmeticSymbolsInNumericOrder13579ThatGivesThisResult(47);
        List<string> expected = new List<string> { "1*3+5*7+9", "-1-3*5+7*9" };
        CollectionAssert.AreEquivalent(expected, listOfExpressions);
    }
0 голосов
/ 16 января 2011

Может быть, вы могли бы попробовать это ...

[TestMethod]
        public void GetAnswersForResultIs47()
        {
            List<string> listOfExpressions = findArithmeticSymbolsInNumericOrder13579ThatGivesThisResult(47);
            Assert.AreEqual(true, listOfExpressions.Contains("1*3+5*7+9"));
            Assert.AreEqual(true, listOfExpressions.Contains("-1-3*5+7*9"));
        }
...