我已经编写了检查方案的测试方法。
[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)>.
答案 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));
如果你懒得每次都写这个扩展方法,它会迭代你的集合,将值与结果进行比较。