Java 在JMock中访问包私有类时出现IllegaAccessError
我已经使用JMock2.6.0-RC2编写了一个单元测试,它使用了几个包私有类。由于某些原因,这会导致出现非法访问错误:Java 在JMock中访问包私有类时出现IllegaAccessError,java,junit,jmock,Java,Junit,Jmock,我已经使用JMock2.6.0-RC2编写了一个单元测试,它使用了几个包私有类。由于某些原因,这会导致出现非法访问错误: java.lang.IllegalAccessError: tried to access class foo.PackagePrivateClass from class $Proxy6 at $Proxy6.getInstance(Unknown Source) at foo.UsingClass.<init>(UsingClass.java:
java.lang.IllegalAccessError: tried to access class foo.PackagePrivateClass from class $Proxy6
at $Proxy6.getInstance(Unknown Source)
at foo.UsingClass.<init>(UsingClass.java:6)
at foo.FailingTest.testFailure(FailingTest.java:29)
ExampleInterface.java
package foo;
// Imports omitted
@RunWith(JMock.class)
public class FailingTest {
private static final PackagePrivateClass EXAMPLE_INSTANCE =
new PackagePrivateClass();
public Mockery context = new JUnit4Mockery();
@Test
public void testFailure() {
final ExampleInterface exampleInterface = context
.mock(ExampleInterface.class);
context.checking(new Expectations() {
{
oneOf(exampleInterface).getInstance();
will(returnValue(EXAMPLE_INSTANCE));
}
});
new UsingClass(exampleInterface); <-- exception thrown from constructor
}
}
package foo;
public interface ExampleInterface {
PackagePrivateClass getInstance();
}
package foo;
class PackagePrivateClass {
PackagePrivateClass() {}
@Override
public String toString() {
return "Hello, World!";
}
}
package foo;
class UsingClass {
UsingClass(ExampleInterface exampleInterface) {
PackagePrivateClass bar = exampleInterface.getInstance(); // <--- exception
System.out.println(bar); // originates here
}
}
PackagePrivateClass.java
package foo;
// Imports omitted
@RunWith(JMock.class)
public class FailingTest {
private static final PackagePrivateClass EXAMPLE_INSTANCE =
new PackagePrivateClass();
public Mockery context = new JUnit4Mockery();
@Test
public void testFailure() {
final ExampleInterface exampleInterface = context
.mock(ExampleInterface.class);
context.checking(new Expectations() {
{
oneOf(exampleInterface).getInstance();
will(returnValue(EXAMPLE_INSTANCE));
}
});
new UsingClass(exampleInterface); <-- exception thrown from constructor
}
}
package foo;
public interface ExampleInterface {
PackagePrivateClass getInstance();
}
package foo;
class PackagePrivateClass {
PackagePrivateClass() {}
@Override
public String toString() {
return "Hello, World!";
}
}
package foo;
class UsingClass {
UsingClass(ExampleInterface exampleInterface) {
PackagePrivateClass bar = exampleInterface.getInstance(); // <--- exception
System.out.println(bar); // originates here
}
}
使用class.java
package foo;
// Imports omitted
@RunWith(JMock.class)
public class FailingTest {
private static final PackagePrivateClass EXAMPLE_INSTANCE =
new PackagePrivateClass();
public Mockery context = new JUnit4Mockery();
@Test
public void testFailure() {
final ExampleInterface exampleInterface = context
.mock(ExampleInterface.class);
context.checking(new Expectations() {
{
oneOf(exampleInterface).getInstance();
will(returnValue(EXAMPLE_INSTANCE));
}
});
new UsingClass(exampleInterface); <-- exception thrown from constructor
}
}
package foo;
public interface ExampleInterface {
PackagePrivateClass getInstance();
}
package foo;
class PackagePrivateClass {
PackagePrivateClass() {}
@Override
public String toString() {
return "Hello, World!";
}
}
package foo;
class UsingClass {
UsingClass(ExampleInterface exampleInterface) {
PackagePrivateClass bar = exampleInterface.getInstance(); // <--- exception
System.out.println(bar); // originates here
}
}
package-foo;
类使用类{
UsingClass(ExampleInterface ExampleInterface){
PackagePrivateClass bar=exampleInterface.getInstance();//为将来的读者提供更新
目前,我认为这是JMock中的一个bug。我已经在JMock github页面上提交了它:。还没有回复(也没有回复我在邮件列表上的评论)
后来我改用了,它能够毫无差错地处理完全相同的情况