我现在在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似乎也是如此。离线。如果任何人当前正在使用它,请说出来,并请显示一些示例。
尤其是能够仅创建类,并用修饰声明函数以将其指定为应运行的测试会很好。
答案 0 :(得分:1)
正如其他人指出的那样,不幸的是,标准库中没有很好的解决方案,尤其是由于许多GLib的g_assert_foo
方法在Vala下不起作用或没有意义。
对于Geary,我采用的this approach使用类似于JUnit的基于类的框架,并集成到现有的GLib测试工具中,但是对其进行了修改以引发错误,而不是使用普通的assert()
调用,并增加了对模拟对象的支持,更广泛的assert_foo
方法,处理预期的/意外的错误以及测试异步方法。请参见Geary来源中的test directory,尤其是文件test-case.vala
和mock-object.vala
。
它当然可以进行大量清理,但独立于Geary的应用程序代码,因此可以轻松导入并在其他地方使用。如果有人有兴趣使用和回馈它,我很乐意将其拆分为一个单独的库。