是否有一种方法可以在要测试的类中定义测试功能?
我来自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中怎么做等同的事情?
可能不是您想要的答案,但是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)。