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

Assert a value is one from a set of acceptable values

我写了测试方法来检查场景。

[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);
}

I want to check multiple condition that result is either 'AND' or 'OR'.

我知道这行有一些错误,它不是与选项进行比较的正确方法

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

错误:

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

太复杂了。为什么不是这个?

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));

如果您懒得每次都这样做,请编写扩展方法,该方法遍历您的集合,将值与结果进行比较。

您可以使用 CollectionAssert.Contains() 来测试集合是否包含值。虽然它颠倒了测试中值的角色,但它会用一个语句覆盖条件:

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

I want to check multiple condition that result is either 'AND' or 'OR'.

我觉得这不是个好主意。单元和单元测试应该以预期结果是明确的方式编写。考虑以您可以执行的方式来制定您的测试(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);
}

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