断言值是一组可接受的值中的一个

时间:2017-11-29 12:51:47

标签: c# asp.net unit-testing mstest

我已经编写了检查方案的测试方法。

[TestMethod]
public void Return_CheckJUNK_GetComperatorForConditions()
{
    // Arrange 
    string whereClause = "This is the Test String.";
    string conditionLeft = "This is";
    string conditionRight = "Test String.";
    object[] args = new object[3] { whereClause, conditionLeft, conditionRight };

    // Act 
    PrivateObject objPrivate = new PrivateObject(typeof(ManageConfigurations));
    var result = (string)objPrivate.Invoke("GetComperatorForConditions", args);

    // Assert 
    object[] arg = new object[2] { "AND", "OR" };
    Assert.AreEqual(arg, result);
}
  

我想检查多个条件,结果是' AND'或者'或'。

我知道这行有一些错误,不适合与选项进行比较

object[] arg = new object[2] { "AND", "OR" };
Assert.AreEqual(arg, result);

错误:

Message: Assert.AreEqual failed. Expected:<System.Object[ (System.Object[])>. Actual:<the (System.String)>. 

3 个答案:

答案 0 :(得分:4)

您可以使用CollectionAssert.Contains()来测试集合是否包含值。虽然它会在测试中反转值的作用,但它将用一个语句覆盖条件:

CollectionAssert.Contains(new [] { "AND", "OR" }, result);

答案 1 :(得分:3)

  

我想检查多个条件,结果是&#39; AND&#39;或者&#39;或&#39;。

这对我来说听起来不错。单位和单元测试应以预期结果明确的方式编写。考虑以你可以做的方式来制定你的测试(NUnit-esque,但要明确)

[TestCase("This is the Test string.", "This is", "Test string.", "AND")]
[TestCase("This is the Test string.", "This is", "FooBar", "OR")]
public void Return_CheckJUNK_GetComperatorForConditions(string whereClause, string conditionLeft, string conditionRight, string expectedComparator)
{
    var args = new object[] { whereClause, conditionLeft, conditionRight };

    var objPrivate = new PrivateObject(typeof(ManageConfigurations));
    var result = (string)objPrivate.Invoke("GetComperatorForConditions", args);

    Assert.AreEqual(expectedComparator, result);
}

如果结果取决于配置,请修复测试配置,或更好按配置进行测试。

答案 2 :(得分:2)

过于复杂。为什么不呢?

object[] arg = new object[2] { "AND", "OR" };
Assert.AreEqual(arg[0] == result || arg[1] == result, true);

甚至更简单(感谢Marc Gravell):

Assert.IsTrue(result == "AND" || result == "OR");

使用LINQ收集值的通用方法:

object[] arg = new object[2] { "AND", "OR" };
Assert.IsTrue(arg.Any(x => x == result));

如果你懒得每次都写这个扩展方法,它会迭代你的集合,将值与结果进行比较。