如何迭代测试数据,然后传递给 XCTestCase?

Posted

技术标签:

【中文标题】如何迭代测试数据,然后传递给 XCTestCase?【英文标题】:How to iterate over test data, then pass to XCTestCase? 【发布时间】:2016-04-02 15:13:21 【问题描述】:

我有同一个计算器的多个版本(iosjavascriptandroid),它们必须在每个平台上产生相同的结果。

我开发了一组测试数据,分布在多个数据集中,例如:

onedigit.json:
  n1: 1, n2: 2, a: 3,
  n1: 4, n2: 5, a: 9...

twodigit.json
  n1: 32, n2: 11, a: 43,
  n1: 42, n2: 0, a: 42

...等等。

我有一个简单的 XCTestCase,例如:

@interface CalculatorAddTest: XCTestCase

@property NSNumber n1;
@property NSNumber n2;
@property NSNumber a;

@end

@implementation CalculatorAddTest

- (void) setUp
    self.n1 = passedInData.n1;
    self.n2 = passedInData.n2;
    self.a = passedInData.a;


- testAdd
   XCAssert( Calculator.add(self.n1, self.n2) == self.a );


- (void) tearDown
    ...

所以,问题是,我该怎么做:

for dataSet in dataSets:
    for d in dataSet:
        run CalculatorAddTest with d

即如何将我的数据传递到 CalculatorAddTest 中的passedInData

我尝试覆盖 init:,但它甚至没有被调用(不知道 XCTestCase 的指定初始化程序是什么,并且标题没有提供任何线索)。

谢谢!

ssteinerX

【问题讨论】:

我不是在问如何进行迭代,只是在问如何将我的数据放入 setUp 以便它可以用作测试用例中每个测试的源数据。 【参考方案1】:

运行多个XCTestCases 的可测试实体是XCTestSuite。我的建议是尝试编写一个自定义 XCTestSuite 来迭代您的数据并在套件中创建多个测试用例。

【讨论】:

谢谢,我发现,我似乎找不到的是如何获取测试数据,在 XCTestSuite 中迭代,发送到 XCTestCase。我想说“使用这个测试数据运行这个 XCTestCase”。而不是让 setUp() 只是“知道”要使用的数据。 我目前正在看这个:github.com/michalkonturek/XCParameterizedTestCase @ssteinerx XCTestCase 有一个非常简单的界面。你所能做的就是告诉测试用例运行,你不能说“用这个数据运行”。您将不得不在某种程度上使数据成为 XCTestCase 固有的,或者通过专门为该数据构建 XCTestCase,或者通过在运行之前告诉 XCTestCase 它应该针对哪些数据运行。 这就是我没有看到的:“在运行之前告诉 XCTestCase 它应该针对哪些数据运行”它执行 setUp(),运行测试,然后是 tearDown()。我没有看到任何地方可以告诉它使用什么数据,除非可能通过一些(总)全局变量或其他东西。

以上是关于如何迭代测试数据,然后传递给 XCTestCase?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 XCTestCase 测试异步代码

如何在 ios XCTestCase 中对两个对象不相等进行单元测试

XCTestCase 保存文件? (记录 NSSavePanel)?

XCTestCase 使用异步操作设置一次

如何从数据框中迭代值并将值传递给 Python 中的发送电子邮件函数

如何在 XCTestCase 中禁用“所有异常”