单元测试:以编程方式运行仅在实际应用程序实例

时间:2017-06-03 20:12:28

标签: java intellij-plugin

我正在为PhpStorm开发一个插件,在某些时候,它尝试从method访问getContainingClass()。当班级名称不存在时,此方法应返回null

为了便于解释,我的visitPhpMethod()就是这样:

final PhpClass methodClass = method.getContainingClass();

if (methodClass == null) {
    return null;
} 

我的问题是以return null编程方式( from unit test )的代码覆盖率来证明它不是死代码。从运行我的插件的PhpStorm的真实实例中,当我只删除类名时,我可以访问此代码:

原始代码,无法访问return null

class ThisIsMyClass { function x(){} }

修改了没有类名的代码,访问return null

class               { function x(){} }

但是当我从单元测试中运行修改后的代码时,它会给出:

class<error descr="Expected: class name"> </error>{ function x(){} }

由此,我的visitPhpMethod()未被触发(,而在实际的PhpStorm应用程序中它)。这样,就不可能覆盖这部分代码(但我喜欢)。

我最好的尝试:而不是依靠testHighlight(),我输入了功能代码(具有类名),然后以编程方式删除了类名(然后是&#34;预期的班级名称&#34;错误不再发生)。最后,我以编程方式运行visitPhpMethod()

不幸的是,getContainingClass()而不是返回null(我希望这样做),它只返回一个没有名字的PhpClass个实例(和它应该对我不起作用。)

此尝试的代码可以是seen here

我也尝试在Intellij社区发布same problem,但没有运气。

1 个答案:

答案 0 :(得分:0)

好的,我发现了我的问题。

实际上,问题不在getContaingClass()上。从null调用时,它确实无法返回visitPhpMethod()。我在另一个尝试从包含类中getNameIdentifier()的方法中发现了我的问题,在这种情况下,它实际上是不存在的,我只是尝试从@NotNull方法返回它。