2017-03-04 1 views
0

Ich habe eine aws Lambda RequestHandler in Java geschrieben, die ein anderes aws Lambda aufruft. Um das andere Lambda aufzurufen, habe ich eine Schnittstelle mit Methoden geschrieben, die mit @LambdaFunction gekennzeichnet sind. Zum Aufbau einen Aufrufer ich benutze:Wie Unit Test AWS Lambda Invokation?

LamdaInvoker lamdaInvoker = LambdaInvokerFactory.builder().lambdaClient(AWSLambdaClientBuilder.defaultClient()).build(LamdaInvoker.class); 

Wenn ich die JUnit-Tests laufen, ohne das Lambda eingesetzt hat, erhalte ich:

java.lang.IllegalArgumentException: No region provided 

Ist es möglich, die Fragesteller in den Unit-Tests zu verspotten und wie?

Antwort

0

Sie können etwas auf den Linien von dieser in Ihrem Test-Klasse versuchen -

private LambdaInvocationHandler handler; 
private AWSLambda lambda; 
private LambdaInvokerFactory factory; 
private YourInterface invoker; 

@Before 
public void setup() { 
    lambda = Mockito.mock(AWSLambda.class); 
    factory = new LambdaInvokerFactory(lambda, null); 
    invoker = factory.build(YourInterface.class); 
    handler = (LambdaInvocationHandler) Proxy.getInvocationHandler(invoker); 
} 

wo Ihre Schnittstelle assumingly iS -

static interface YourInterface { 
    @LambdaFunction 
    void someMethod(String arg1); 
} 

und Ihre Testmethode könnte -

@Test 
public void testSomeMethod() throws Exception { 
    Method x = getMethod("someMethod", String.class); 
    handler.validateInterfaceMethod(someMethod, new Object[] { 
      "str" 
    }); 
}