我已经搜索了JUnit测试用例,它提出了一些看起来实现起来要复杂得多的东西 - 你必须创建一个扩展测试用例然后调用的新类:
public class MathTest extends TestCase {
protected double fValue1;
protected double fValue2;
protected void setUp() {
fValue1= 2.0;
fValue2= 3.0;
}
}
public void testAdd() {
double result= fValue1 + fValue2;
assertTrue(result == 5.0);
}
Run Code Online (Sandbox Code Playgroud)
但我想要的是非常简单的东西,比如NUnit测试用例
[TestCase(1,2)]
[TestCase(3,4)]
public void testAdd(int fValue1, int fValue2)
{
double result= fValue1 + fValue2;
assertIsTrue(result == 5.0);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在JUnit中这样做?
我有一个测试各种情况的单元测试,如下所示:
public void Test1(Int32 a, Int32 b, Int32 c)
Run Code Online (Sandbox Code Playgroud)
假设我想创建没有循环的测试代码,所以我想使用TestCase来指定这样的参数:
[TestCase(1, 1, 1)]
public void Test1(Int32 a, Int32 b, Int32 c)
Run Code Online (Sandbox Code Playgroud)
我有可能用这个属性这样说:
IE浏览器.这样的事情:
[TestCase(new[] { 1, 2, 3, 4 }, new[] { 1, 2, 3, 4 }, new[] { 1, 2, 3, 4 })]
public void Test1(Int32 a, Int32 b, Int32 c)
Run Code Online (Sandbox Code Playgroud)
看起来不像,但也许我忽略了什么?
我正在使用NUnit并尝试为以下方法实现测试:它应该接受两个整数并返回二维数组.所以,我测试的标题看起来像:
[TestCase(5, 1, new int[,]{{1}, {2}, {3}, {4}, {5}})]
public void MyTestMethod(int a, int b, int[][] r)
Run Code Online (Sandbox Code Playgroud)
在编译期间,我遇到以下错误:
错误CS0182:属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式(CS0182)
我知道可以使用TestCaseSource引用对象数组来完成,例如以下问题的答案:
它提供了如下代码:
private object[][] combination_tests = new [] {
new object[] {5, 1, new [,]{{1}, {2}, {3}, {4}, {5}}},
};
[Test]
[TestCaseSource("combination_tests")]
public void MyTestMethod(int a, int b, int[,] r)
Run Code Online (Sandbox Code Playgroud)
但我仍有一个问题:只使用TestCase属性是否可以做到这一点?
我正在使用NUnit 2.5.3 TestCaseSource属性并创建工厂来生成我的测试.像这样的东西:
[Test, TestCaseSource(typeof(TestCaseFactories), "VariableString")]
public void Does_Pass_Standard_Description_Tests(string text)
{
Item obj = new Item();
obj.Description = text;
}
Run Code Online (Sandbox Code Playgroud)
我的来源是这样的:
public static IEnumerable<TestCaseData> VariableString
{
get
{
yield return new TestCaseData(string.Empty).Throws(typeof(PreconditionException))
.SetName("Does_Reject_Empty_Text");
yield return new TestCaseData(null).Throws(typeof(PreconditionException))
.SetName("Does_Reject_Null_Text");
yield return new TestCaseData(" ").Throws(typeof(PreconditionException))
.SetName("Does_Reject_Whitespace_Text");
}
}
Run Code Online (Sandbox Code Playgroud)
我需要做的是向变量字符串添加最大长度检查,但是这个最大长度是在被测试类中的合同中定义的.在我们的例子中它是一个简单的公共结构
public struct ItemLengths
{
public const int Description = 255;
}
Run Code Online (Sandbox Code Playgroud)
我找不到任何方法将值传递给测试用例生成器.我尝试过静态共享值,但这些值并没有被提取.我不想将文件保存到文件中,因为每次代码更改时我都需要重新生成此文件.
我想在我的测试用例中添加以下行:
yield return new TestCaseData(new string('A', MAX_LENGTH_HERE + 1))
.Throws(typeof(PreconditionException));
Run Code Online (Sandbox Code Playgroud)
在概念上相当简单,但我发现无法做到的事情.有什么建议?