首页 > 解决方案 > spring testng:无法加载ApplicationContext

问题描述

我无法加载应用程序上下文。扩展 AbstractTestNGSpringContextTests 的类,它是应用程序上下文感知的。任何帮助这里缺少什么?这是一个简单的弹簧测试文件。我正在使用弹簧靴。我是否需要为配置设置任何内容以获取应用程序上下文。

java.lang.IllegalStateException: Failed to load ApplicationContext
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:125)
    at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:108)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:246)
    at org.springframework.test.context.testng.AbstractTestNGSpringContextTests.springTestContextPrepareTestInstance(AbstractTestNGSpringContextTests.java:145)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85)
    at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:510)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:211)

这是测试类

@SuppressWarnings("unchecked")
public class AesGcmDynamoCryptoCipherProviderTest extends AbstractTestNGSpringContextTests {
    @Mock
    AwsCrypto awsCrypto;
    @Mock
    DynamoDBProvider dynamoDBProvider;
    @Mock
    MasterKeyProvider masterKeyProvider;
    @Mock
    Table table;

    @Autowired
    ApplicationContext applicationContext;

    private static <T> CryptoResult<T, ?> mockCryptoResult(T result) {
        CryptoResult<T, ?> cryptoResult = mock(CryptoResult.class);
        when(cryptoResult.getResult()).thenReturn(result);
        return cryptoResult;
    }

    @BeforeMethod
    private void init() {
        MockitoAnnotations.initMocks(this);
        when(dynamoDBProvider.getDynamoDB()).thenReturn(mock(DynamoDB.class));
        when(dynamoDBProvider.getDynamoDB().getTable(anyString())).thenReturn(table);

        CryptoResult<String, ?> decryptoResult = mockCryptoResult(Base64.getEncoder().encodeToString("*decrypted*".getBytes()));
        when(awsCrypto.decryptString(eq(masterKeyProvider), anyString())).thenReturn(decryptoResult);
        CryptoResult<String, ?> encryptoResult = mockCryptoResult("*encrypted*");
        when(awsCrypto.encryptString(eq(masterKeyProvider), anyString())).thenReturn(encryptoResult);
    }

    @Test
    public void testGetCipher() {
        AesGcmDynamoCryptoCipherProvider provider = new AesGcmDynamoCryptoCipherProvider("table", awsCrypto, dynamoDBProvider, masterKeyProvider);

        UUID cipherId = UUID.randomUUID();

        Item cipherItem = mockCipherItem(cipherId);
        when(table.getItem(eq("KEY_ID"), eq(cipherId.toString()))).thenReturn(cipherItem);

        AesGcmCipher cipher = provider.getCipher(cipherId);

        assertNotNull(cipher);
        assertEquals(cipher.getCipherId(), cipherId);
    }

}

标签: javaspringtestngspring-test

解决方案


推荐阅读