瓦拉单元测试

时间:2019-06-17 08:16:51

标签: unit-testing glib 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)提供的很多功能。我想知道是否有人可以推荐为GLib测试编写的良好单元测试框架,或者提供类似的东西?

我已经研究过valadate,但是最近它似乎并没有引起太多关注,尽管它可能不需要频繁更新,但是我却一直无法找到有效的样本,而wiki似乎也是如此。离线。如果任何人当前正在使用它,请说出来,并请显示一些示例。

尤其是能够仅创建类,并用修饰声明函数以将其指定为应运行的测试会很好。

1 个答案:

答案 0 :(得分:1)

正如其他人指出的那样,不幸的是,标准库中没有很好的解决方案,尤其是由于许多GLib的g_assert_foo方法在Vala下不起作用或没有意义。

对于Geary,我采用的this approach使用类似于JUnit的基于类的框架,并集成到现有的GLib测试工具中,但是对其进行了修改以引发错误,而不是使用普通的assert()调用,并增加了对模拟对象的支持,更广泛的assert_foo方法,处理预期的/意外的错误以及测试异步方法。请参见Geary来源中的test directory,尤其是文件test-case.valamock-object.vala

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