如何测试一个接受Class <t> </t>的方法

时间:2013-10-30 17:34:45

标签: java generics

正在研究Jenkins插件并同时评估单元测试软件,并获得了学习机会。该软件为此方法编写了一个测试用例 -

    public boolean isApplicable(Class<? extends AbstractProject> aClass) {
        // indicates that this builder can be used with all 
        // kinds of project types
        return true;
    }

看起来很简单。测试用例虽然没有编译,但我还没有弄清楚如何通过使用通配符的有限知识来解决它。我目前的尝试 -

    AbstractProject ap = new FreeStyleProject(null, null);;
    Assert.assertTrue(testedObject.isApplicable(ap));

(FreeStyleProject扩展AbstractProject)

这会显示错误消息

FitnesseBuilder.DescriptorImpl类型中的方法isApplicable(Class)不适用于参数(AbstractProject)

我已经尝试了各种类型来传递给那个参数,但似乎无法让它接受任何东西。有人想给我一个快速的课程吗?

2 个答案:

答案 0 :(得分:4)

尝试Assert.assertTrue(testedObject.isApplicable(FreeStyleProject.class));,因为它需要一个Class而不是AbstractProject

的实例

答案 1 :(得分:4)

您需要传递Class<T>个对象,而不是该类的实例

// AbstractProject ap = new FreeStyleProject(null, null);
Assert.assertTrue(testedObject.isApplicable(FreeStyleProject.class));

当然,FreeStyleProject类需要扩展AbstractProject(因为当前代码的第一行编译,它已经这样做了。)