我有一个简单的Micronaut Lambda应用程序,很难成功地将Mocks注入到我的单元测试中。
build.gradle
micronaut {
runtime("lambda")
testRuntime("junit5")
...
}
具有以下基本控制器
java prettyprint-override">@Controller
public class MyController{
Service service;
@Inject
public Controller controller(Service service){
this.service = service;
}
@Post("/test")
public void someEndpoint(){
service.doSomething();
}
}
以及以下测试类别:
@MicronautLambdaTest
public class MyControllerTest{
@Inject
Service service;
@Inject
@Client("/")
RxHttpClient rxHttpClient;
@MockBean(Service.class)
Service service() {
return mock(Service.class);
}
@Test
void should_do_something_when_something(){
rxHttpClient.toBlocking().exchange(HttpRequest.POST("/test",""));
verify(service, times(1)).doSomething();
}
}
上面的测试将失败,因为模拟从未与之交互。
调试时,我可以看到服务
在测试类本身中被模拟,但在MyController
类中使用了一个实际的对象。
我注意到,当我不使用运行时("lambda")
(例如运行时("netty")
)时,这是预期的,所以我认为这与Lambda运行时有关,我希望有人能够指出我在正确的方向上。
使用运行时(“lambda”)
时,需要使用处理程序类启动测试,并删除@MicronautTest
。
MicronautLambdaHandler handler = new MicronautLambdaHandler();
这将启动应用程序上下文。
还可以使用Application ationContext.builder()传递参数
ApplicationContextBuilder config = ApplicationContext.builder()
.environments("test");
MicronautLambdaHandler handler = new MicronautLambdaHandler(config);
使用@MicronautTest
和运行时(“lambda”)
分别运行两组环境,这就是我删除@MicronautTest
的原因。
如果你还想模拟课堂。您可以创建一个模拟类,并用@Replace(ClassToMock.class)
和@要求
对其进行注释。对我来说是@要求(env=环境。测试)
.
对于不是接口实现的类,需要扩展要模拟的类(我使用的是v2.5.6)。
@Replaces(ClassToMock.class)
@Requires(env = Environment.TEST)
@Singleton
public class MockClass extends ClassToMock {
@Override
public void someMethod() {}
}
对于实现接口的类,您可以简单地创建另一个实现并对其进行类似的注释。
我有一个这样的处理程序和一个自定义注释@validrequest: 注释本身看起来是这样的: 而验证器是这样的: 问题是验证被完全忽略了。我可以发送任何事件有或没有身体和一切工作无一例外。我做的一切都是根据Micronout文档,会有什么问题吗? https://docs.micronaut.io/latest/guide/index.html#BeanValidation
我一直在找这样的东西。 拥有此micronaut应用程序代码 如何将Spring的ApplicationContext与Micronaut的ApplicationContext合并。 问候
我尝试用LocalStack运行lambda函数。我安装了awscli-local和localstack pip3安装awscli-local pip3安装--用户localstack--忽略-安装六个 然后我启动了localstack lamdba_executor=Docker本地堆栈启动--Docker 当我现在要创建lambda函数时 aws lambda create-function-
问题内容: 在Python中,我试图按日期与lambda排序。我无法理解我的错误消息。消息是: 我的电话是 问题答案: 采用 在Python 2.x上,该函数按以下顺序使用其参数: 因此,如果没有,您传入的函数将被视为带有2个参数的函数。
Serverless 应用的一个不方便之处:缺少一个本地的调试环境。在之前的那篇《Serverless 架构应用开发:使用 serverless-offline 在本地部署与调试》中, 我们提到了使用 serverless-offline 插件来在本地部署和调试。在本文中,我们将介绍 serverless-plugin-simulate 插件来解决相似的问题。 serverless-plugin-
对于我的一个项目,我使用GLFW3。我试着给函数GLFWSetKeyCallback一个c11 lambda,它把一个GFLWwindow和一个GLFWfunkey函数作为参数,这是一个要作废的typedef(*GLFWkeyfun)(GLFWwindow*,int,int,int,int)。 该函数是从我的窗口类调用的,下面是代码 window.hpp 还有window.cpp 和来自编译器的错