断言一个值是一组可接受值中的一个
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);
}
如果结果取决于配置,请修复测试的配置,或更好根据配置进行测试。
我写了测试方法来检查场景。
[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);
}
如果结果取决于配置,请修复测试的配置,或更好根据配置进行测试。