我正在尝试测试一个服务类(负责调用存储库层并在需要时执行一些操作),基本上,这是我正在尝试测试的类
class CarServiceImpl{
public Car findById(String id){
//call repository layer to find a car
}
public void deleteById(String id){
Car car = this.findById(id);
if(car != null){
//Call repository layer to update the car
}else{
Throw NotFOundException();
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我在deleteById方法上调用了findById方法,所以我的问题是.
在同一个类上调用方法真的是代码味道吗?我不认为我应该创建一个单独的类来通过id找到一辆汽车.
如何在"deleteById"方法上模拟对"findById"的调用,如果我使用Mockito.when(carServiceImpl.findById("car1")).thenReturn(carModel);
它仍然调用方法,所以我需要模拟对存储库的调用以便通过id查找,即使我已经测试了方法findById .
假设我的应用程序中有多个类使用的方法.此方法将a Stream作为参数并应用终端操作forEach以将数据写入文件,如下所示:
public File writeStreamToTempFile(Stream stream) {
stream.forEach(item -> {
//some code to write item to a file
}
}
Run Code Online (Sandbox Code Playgroud)
这个方法有多个调用者,在某些方法中我需要转换数据,比方说使用map函数,如下所示:
public void exportAnimalsData() {
Stream<Animal> animalStream = //fetch data from a DB
animals.filter(a -> a.type.equals("dog"))
.map(a -> //Do something useful to transform the Dogs);
writeStreamToTempFile(animalStream);
}
Run Code Online (Sandbox Code Playgroud)
并非该writeStreamToTempFile方法的所有调用者都需要对流执行其他操作.
所以我的问题是:
将操作应用于不同方法的流是不好的做法?
我在某地读过Stream永远不应该是方法的返回类型(调用者不知道该方法是否已经消耗了流),它是否也适用于方法的参数?
我应该只应用相同方法中所需的所有操作,还是可以在不同的方法中将中间操作附加到同一个流中?
我有一个带有 Java spring boot 应用程序的 docker 映像,该应用程序在端口 8080 的 docker 容器中启动和运行没有问题,正如您在部分日志中看到的那样:
\n\n 2020-02-24 02:09:07.906 INFO : Tomcat started on port(s): 8080 (http) with context path \'/web-app\'\n 2020-02-24 02:09:07.909 INFO : Started web-app in 7.034 seconds (JVM running for 7.601)\nRun Code Online (Sandbox Code Playgroud)\n\n如果我在容器内运行curl命令(使用终端),我会得到正确的响应,表明服务器正在运行并且正在运行。
\n\n/# curl http://localhost:8080/web-app/cars/1\n{"id":"1"}\nRun Code Online (Sandbox Code Playgroud)\n\n现在,当我尝试访问主机上的应用程序时,问题就来了,我正在使用 Windows 10 顺便说一句(在网络浏览器中http://localhost:8080/web-app/cars/1),这里是如何我运行泊坞窗图像。
\n\ndocker run web-app -p 8080:8080\nRun Code Online (Sandbox Code Playgroud)\n\n但是,我不认为这是 Windows 问题,因为我可以运行一个简单的 nginx 服务器,并且可以毫无问题地在主机上访问它。
\n\ndocker run -d -p 80:80 nginx\nRun Code Online (Sandbox Code Playgroud)\n\n我注意到的一件事是当看到正在运行的容器时,端口列
\n\nC:\\Users\\luis>docker ps\nCONTAINER ID IMAGE COMMAND CREATED …Run Code Online (Sandbox Code Playgroud) 我们正在创建一个要部署在多个环境(dev、qa、stg、prd)中的微服务项目,我们计划利用云形成模板,使用嵌套堆栈来实现多个服务之间的共享资源。问题是,当使用嵌套堆栈时,您需要指定嵌套资源的 TemplateURL,这是一个指向 S3 存储桶的静态 URL,每次更新模板时该 URL 都会发生变化(上传包含一些更改的新模板)。
所以问题是,使用 GIT 等版本控制工具来跟踪嵌套模板中所做的更改(一旦上传到 S3 就会给您一个新的 URL)的最佳方法是什么?