测试失败时,ceylon.test.TestRunner失败

时间:2017-09-12 16:23:03

标签: ceylon

每当测试函数(使用test注释的函数)包含失败的断言时,断言与调整异常时的效果相同:不会执行该函数中的其他代码行。因此,用'test'注释的函数中的断言语句就像普通Ceylon函数中的普通断言语句一样。这个runs contrary to the documentation,声明普通的断言语句可用于进行单元测试。

因此,运行下面的代码,我会看到语句myTests1但不是'myTests2`:

import ceylon.test {
    test, TestRunner, createTestRunner
}

test
Anything myTests1 () {
    // assert something true!
    assert(40 + 2 == 42);
    print("myTests1");
    return null;
}

test
void myTests2 () {
    // assert something false!
    assert(2 + 2 == 54);
    print("myTests2");
}


"Run the module `tests`."
shared void run() {

    print("reached run function");

    TestRunner myTestRunner = createTestRunner(
        [`function myTests1`, `function myTests2`]);

    myTestRunner.run();
}

这是实际输出:

"C:\Program Files\Java\jdk1.8.0_121\bin\java" -Dceylon.system.repo=C:\Users\Jon\.IdeaIC2017.2\config\plugins\CeylonIDEA\classes\embeddedDist\repo "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.2.1\lib\idea_rt.jar=56393:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.2.1\bin" -Dfile.encoding=windows-1252 -classpath C:\Users\Jon\.IdeaIC2017.2\config\plugins\CeylonIDEA\classes\embeddedDist\lib\ceylon-bootstrap.jar com.redhat.ceylon.launcher.Bootstrap run --run run tests/1.0.0
reached run function
myTests1

Process finished with exit code 0

1 个答案:

答案 0 :(得分:4)

这是按预期工作 - 用assert替换那些assertEquals具有相同的效果并打印相同的输出,因为两者完全相同:如果断言失败则抛出异常。

我所知道的所有测试框架在这种情况下的行为方式相同:断言失败会导致异常,从而立即终止测试方法的执行。这是设计上的,因为一旦一个期望被违反,你就不知道你的程序将会做什么 - 方法的其余部分可能取决于那个断言保持为真,并且可能以不可预测和混乱的方式打破。

如果你正在编写像

这样的测试
test
shared void testTwoThings() {
    assertEquals { expected = 42; actual = 40 + 2; };
    assertEquals { expected = 42; actual = 6 * 9; };
}

你应该写两个测试。