惩戒

2014-01-29 84 views
5

之前jmockit(1.5)的静态方法根据the example in the Jmockit tutorial这段代码应该做的伎俩:惩戒

@BeforeClass 
public static void setUpClass() { 
    new MockUp<UtilJndi>(){ 

     @Mock 
     public static String getDirectoryFromContext(Property jndiName) // line 66 
      throws DirectoryNotFoundException { 
     return "noDirectory"; 
     } 
    }; 
} 

但它显示:

myclass.java:[66,29] error: Illegal static declaration

我怎样才能解决这个问题?

我会添加其他的解决方法至极的工作对我来说:

创建我的嘲笑类扩展样机:

public static class MockUtilJndi extends MockUp<UtilJndi> { 

    public MockUtilJndi() { 
     super(); 
    } 

    @Mock 
    public static String getDirectoryFromContext(Property jndiName) 
      throws DirectoryNotFoundException { 
     return "noDirectory"; 
    } 
} 

如果您发现我所说的超()我的构造函数中。根据文件,如果你打电话样机构造它会改变实施目标类原因..所以一旦你有了这个在你嘲笑类的构造函数,你只需要创建类的@BeforeClass内部注解的方法:

@BeforeClass 
public static void setUpClass() { 
    new MockUtilJndi(); 
} 
+0

哪条线是66线? –

+0

public static String getDirectoryFromContext(Property jndiName) –

+1

虽然我不知道JMockit,但问题似乎对我很清楚。错误消息“非法静态声明”告诉你一切。 “静态”是错误的。此外,您链接的示例在此处不使用静态方法。你怎么会相信,静态必须放在那里? (混淆......) – Seelenvirtuose

回答

7

好吧,我会将我的评论更新为答案。

首先,错误信息非常清楚。 “非法静态声明”只是意味着,静态关键字放置错误。去掉它!

当你试图嘲笑一种静态方法时,你可能会认为你也必须使用static关键字。但documentation for the Mock annotation说:

Method modifiers (including public, final, and even static), however, don't have to be the same.

这只是意味着,你可以模拟静态方法,即使没有声明为静态。

嗯...我强烈地感觉到,文档的措辞有点混乱。显然,这不是一个选项,但你不能声明它是静态的。