Vala 中的单元测试

Unittesting in Vala

我现在已经在 Vala 中使用 GLibs 内置单元测试编写了一些单元测试。这意味着一切都按以下方式完成:

class test_some_class{

    static void main(string[] args){

        Test.ref(args);

        Test.add_func("/some/path/test-some-functionality", test_some_functionality);

        Test.run();

    }

    static void test_some_functionality() {

        assert(true); //Or any other boolean expression such as 'a == b' as pointed out by @AlexB 

    }
}

valadoc 上没有任何内容指定可用函数来比较字符串、双精度数等

虽然单元测试通常很乏味(但有必要),但我发现它在这里特别乏味,这些似乎是准系统的单元测试,缺少 JUnit 和 mstests(用于 .NET Core)中提供的很多功能。我想知道是否有人可以推荐一个好的单元测试框架 for/with GLib 测试,提供类似的东西?

我看过 valadate,但这些天它似乎并没有得到太多关注,虽然它可能不需要经常更新,但我一直无法找到工作样本,而且 wiki 也似乎离线。如果有人正在使用它,请发言,并请展示一些例子。

特别是,如果能够仅创建 类,声明带有装饰的函数,将它们指定为应该 运行.

的测试,那就太好了

正如其他人所指出的,不幸的是,标准库中没有很好的解决方案,特别是因为许多 GLib 的 g_assert_foo 方法在 Vala 下不起作用或没有意义。

对于 Geary,我采用了 Geary 源代码中的 this approach that uses a class-based framework similar to JUnit and integrates into the existing GLib test harness, but modified it to throw errors rather than use plain assert() calls, and added support for mock objects, a wider range of assert_foo methods, handle expected/unexpected errors and testing async methods. See the test directory,特别是文件 test-case.valamock-object.vala

它当然可以进行大量清理,但独立于 Geary 的应用程序代码,因此可以轻松导入并在别处使用。如果有人有兴趣使用它并回馈它,我很乐意将它拆分成一个单独的库。