1

我目前正在开发一个系统,希望能用于比较两个单独但同名的类的结果。通过比较这两个类,我希望能够确定在给定相同输入参数的情况下,第一类方法的输出是否与第二类方法的输出相同。

我将如何动态地在两个独立的类上运行相同的测试类?

伪代码示例:

如果我有一个简单的测试类......

class TestClass{
   public int TestMethod(int num){
   int num2;
   TestedClass t = new TestedClass();
   num2 = t.add(num);
}

以及需要测试的两个相同的类...

class TestedClass{
    public int add(int num){
    num = num + 2;
    return num;
}

class TestedClass{
    public int add(int num){
    num = num + 4;
    return num;
}

我将如何针对两个不同的 TestedClass 运行 TestClass,然后将测试结果保存在某种形式的集合中。

如您所见,两个 TestedClass 的名称相同,返回类型相同,只是功能略有不同。我也无权更改 TestedClass,但是我可以控制它们在程序、包等中的位置。

提前致谢。

编辑:

似乎很巧妙地漏掉了一条很重要的信息:

我也无权编辑TestClass,尽管如上所述,我会知道类/方法名称并控制它们的位置。这个想法是构建一些可以动态测试给定输入副本和正确输出(TestClass 和另一个 TestedClass)的类的东西。

为混乱道歉。

编辑2: 我可以访问测试,即。我可以运行它们,但我无法编辑它们,例如建议的一些答案。

4

3 回答 3

5
foo.bar.TestedClass   c1 = new foo.bar.TestedClass();
baz.plugh.TestedClass c2 = new baz.plugh.TestedClass();
assertEquals(c1.add(42), c2.add(42));

编辑

您不需要在同一个 JVM 中运行这两个测试,您只需调用方法、保存输出并使用各种技术进行比较。或者您可以像旧的 JUnit 一样扫描类,并Class.forName("...").newInstance()通过反射实例化和运行方法。

于 2012-08-23T13:09:35.357 回答
0

您应该创建一个接口来声明该add方法,并实现工厂方法模式以提供此接口的不同实现。

处理此问题的更高级方法是使用注入依赖库,例如Guice

于 2012-08-23T13:16:03.343 回答
0

除非您想同时在两个 TestedClasses 上运行 TestClass,否则它只是在类路径中安排 jar,以便应该测试的预期 TestedClass 首先出现。希望这可以帮助。

于 2012-08-23T13:34:36.533 回答