集成使用C ++单元测试框架测试Java应用程序

时间:2017-06-27 11:01:07

标签: java c++ unit-testing

我有一个用Java(客户端)和C ++(服务器)编写的客户端/服务器应用程序。

我想知道是否有一种方法可以使用Gtest(或任何其他测试框架,不一定是在C ++中,只要它不是Java框架)作为在Java端执行测试的基础框架。

所以基本上,我想要实现的是以下伪代码

// inside MyClass.java

public class MyClass{
    public int myMethod(){
        return 42;
    }
}

//-------------------\\
// inside MyTest.cpp \\

TEST_F(MyJavaClassTest, meaning_of_life)
{
    ASSERT_EQUALS(MyClass.myMethod(), 42);
}

//--------\\
// Output \\

[ RUN      ] MyJavaClassTest.meaning_of_life
[       OK ] MyJavaClassTest.meaning_of_life (0 ms)

1 个答案:

答案 0 :(得分:4)

即使您找到了这样的解决方案,我也会强烈反对他们。原因是您将获得Java和C ++代码之间的另一个互操作层。

首先,您需要以某种方式将Java代码与C ++客户端连接(在这种情况下,"客户端"是您的测试)。让我们假设您已经完成了这项工作。

现在,当你的一些测试失败时会发生什么?基本上,如果你用Java编写它们,你必须找出:

  • 是否是由于您的Java客户端代码中存在问题?
  • 您的C ++服务器代码中存在问题吗?
  • 由于客户端和服务器之间存在Java / C ++互操作而导致问题吗?

如果在Java代码之上添加另一个互操作层,则向其添加另一个问题,即:

  • 由于单元测试和客户端之间的C ++ / Java互操作,这是一个问题吗?

根据我的个人经验(主要基于混合的C ++ / C#代码库),这种互操作性问题很少见,但是一旦进入它们就非常耗时。

所以,除非您计划在Java客户端上添加或维护 C ++接口以满足生产需求,否则不要这样做。如果您不喜欢JUnit,请尝试查看other Java testing frameworks

反之亦然,如果拥有基于Java代码的C ++ API是产品中的必需功能(这在您的描述中似乎不太可能),那么对Java客户端的C ++测试将是&# 34;必须&#34 ;.但只有在这种情况下。