【问题标题】:How do I mock Authentication objects in PowerMockito?如何在 PowerMockito 中模拟 Authentication 对象?
【发布时间】:2018-06-22 16:54:17
【问题描述】:

请注意,这是一个 UNIT 测试,而不是一个集成测试,所以我不想要任何 Spring 并且实际上所有可以模拟的东西都应该是。

这段代码:

@RunWith(PowerMockRunner.class)
@PrepareForTest({...})
@PowerMockIgnore({
        "com.sun.crypto.*",
        "javax.crypto.*",
        "javax.management.*"})
public class TestClass {
...


@Test
public void testMethod (
          Authentication mockAuthentication = Mockito
                .mock(Authentication.class);  
  ) 
}

...抛出此异常:

java.lang.LinkageError: loader constraint violation: loader (instance of org/powermock/core/classloader/MockClassLoader) previously initiated loading for a different type with name "javax/security/auth/Subject"

    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at org.powermock.core.classloader.MockClassLoader.loadUnmockedClass(MockClassLoader.java:262)
    at org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader.java:206)
    at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass1(DeferSupportingClassLoader.java:89)
    at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:79)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.springframework.security.authentication.TestingAuthenticationToken$MockitoMock$2107019845.<clinit>(Unknown Source)
    at sun.reflect.GeneratedSerializationConstructorAccessor27.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.objenesis.instantiator.sun.SunReflectionFactoryInstantiator.newInstance(SunReflectionFactoryInstantiator.java:48)
    at org.objenesis.ObjenesisBase.newInstance(ObjenesisBase.java:73)
    at org.mockito.internal.creation.instance.ObjenesisInstantiator.newInstance(ObjenesisInstantiator.java:18)
    at org.mockito.internal.creation.bytebuddy.SubclassByteBuddyMockMaker.createMock(SubclassByteBuddyMockMaker.java:47)
    at org.powermock.api.mockito.mockmaker.PowerMockMaker.createMock(PowerMockMaker.java:50)
    at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:35)
    at org.mockito.internal.MockitoCore.mock(MockitoCore.java:63)
    at org.mockito.Mockito.mock(Mockito.java:1729)
    at org.mockito.Mockito.mock(Mockito.java:1642)

线索?我一直在尝试 StackOverflow 的各种东西,但还没有找到解决方案。 PowerMockito 肯定使用这个类来发挥它的魔力,所以这可能是由 PowerMockito 加载的并且无法更改?

【问题讨论】:

  • 没有。这是一个典型的场景,有人写了一个原型,然后公司拒绝把它扔掉,因为他们不懂工程。然后因为原型本身就是一个测试,所以必须测试从未打算测试的代码。如果在测试之前为测试重构因子,则会引入错误,因为代码没有经过测试。我们决定在重构所有内容之前使用 powermock,只是为了让我们达到体面的覆盖状态。计划稍后将其删除。它不会在新代码中使用。

标签: java unit-testing powermockito


【解决方案1】:

在这种情况下,该类不属于 javax.security,因此您应该忽略 @PowerMockIgnore 中的“javax.security.*”。它有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 2018-03-07
    • 1970-01-01
    相关资源
    最近更新 更多