有没有一种方法可以在要测试的类中定义测试函数?

时间:2019-11-26 21:14:27

标签: unit-testing kotlin conditional-compilation

有没有一种方法可以在正在测试的类中定义测试函数?

我来自C / C ++ / D背景,所以我习惯于使用条件编译来使部分代码针对单元测试而不是针对发行版进行编译。但是,在kotlin或Java中,我了解到,实现类似结果的唯一方法是编写一个单独的文件,该文件仅针对unittests的目标进行编译。我真的不想通过将代码不必要地分成两个文件来减少代码的可读性,而且我真的不想在不应包含在发行版本中的函数中进行编译,那么如何避免这种情况?

当我谈论至少有一些单元测试与他们正在测试的代码内联时,人们总是很奇怪地看着我,所以这是一个粗略的例子,说明我如何使用任何典型的单元测试在C ++中做到这一点像CUnit这样的框架。

class Foo
{
   ...
}

#ifdef BUILD_UNITTESTS
void test_MyTestCase()
{
   ...
}

MY_MACRO_TO_REGISTER_TESTCASE_WITH_TESTING_FRAMEWORK(test_MyTestCase)
#endif

如何在Kotlin或Java中做等效的事情?

1 个答案:

答案 0 :(得分:0)

可能不是您想要的答案,但是JVM语言只是不这样做(鼓励嵌入式测试或能够进行#ifdef替代编译)。常见的约定(从Maven或Gradle之类的构建工具中挑选)是具有镜像的包/目录结构:

  • src/main/java/x/y/z/Foo.java
  • src/test/java/x/y/z/FooTest.java

IDE知道这样的约定,并且可以很容易地在这两个约定之间跳转(IntelliJ上的Ctrl-Shift-T)。