基于事件驱动架构构建微服务第10部分:在docker容器内运行单元测试

原文链接:https://logcorner.com/building-microservices-through-event-driven-architecture-part11-run-unit-tests-inside-a-docker-container/

在本教程中,我将展示如何在docker容器中运行单元测试。

因为我将使用kubernetes在容器中运行微服务,所以单元测试、集成测试、持续集成和持续交付将使用docker镜像和容器来完成。

LogCorner.EduSync.Speech.Domain.UnitTest

让我们继续打开LogCorner.EduSync.Speech.Domain.UnitTest项目并创建一个这样的docker文件(你可以通过右键单击项目名称并选择Docker Support来生成 docker 文件)

Docker文件

Docker文件应如下所示:

c06effde8558bacf4090731a53c5f91f.png

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build

使用 mcr.microsoft.com/dotnet/core/sdk:3.1-buster 作为基础镜像

WORKDIR /src

在docker镜像中创建/src目录。

COPY [“LogCorner.EduSync.Speech/LogCorner.EduSync.Speech.Domain.UnitTest/LogCorner.EduSync.Speech.Domain.UnitTest.csproj”, “LogCorner.EduSync.Speech/LogCorner.EduSync.Speech.Domain.UnitTest/”]
COPY [“LogCorner.EduSync.Speech/LogCorner.EduSync.Speech.Domain/LogCorner.EduSync.Speech.Domain.csproj”, “LogCorner.EduSync.Speech/LogCorner.EduSync.Speech.Domain/”]

复制当前文件夹(src)上的LogCorner.EduSync.Speech.Domain.UnitTest.csproj文件和LogCorner.EduSync.Speech.Domain.csproj文件

请注意,应复制引用的.csproj项目文件,以便以后能够恢复包。

RUN dotnet restore “LogCorner.EduSync.Speech/LogCorner.EduSync.Speech.Domain.UnitTest/LogCorner.EduSync.Speech.Domain.UnitTest.csproj”:

为Log Corner.EduSync.Speech.Domain.UnitTest项目和引用的项目恢复包。

COPY . .

将所有内容(除了.dockerignore文件中包含的文件/目录)复制到docker镜像中的/src目录。

WORKDIR “/src/LogCorner.EduSync.Speech/LogCorner.EduSync.Speech.Domain.UnitTest”

将当前文件夹更改为LogCorner.EduSync.Speech.Domain.UnitTest 项目。

要对其进行测试,请移至\LogCorner.EduSync.Command\src文件夹并运行以下命令以使用unite test Docker文件构建和创建名为unittest-image的镜像:

docker build -t unittest-image -f LogCorner.EduSync.Speech\LogCorner.EduSync.Speech.Domain.UnitTest\Dockerfile .

然后,使用unittest-image作为镜像以交互模式启动容器

docker run -it unittest-image

最后使用以下命令运行单元测试:

dotnet test –logger “trx;LogFileName=UnitTestResultfile.trx”

971df3b7a12f26a9c211a897c230c1a8.png

我可以使用下列命令编辑测试结果文件

cat UnitTestResultfile.trx

docker-compose文件

Compose是一个用于定义和运行多容器Docker应用程序的工具。借助Compose,你可以使用YAML文件来配置应用程序的服务。然后,使用单个命令,从配置中创建并启动所有服务。https://docs.docker.com/compose/

所以让我们创建一个docker-compose-unit-tests文件

docker-compose-unit-tests文件

该文件用于构建和运行镜像logcorner-edusync-speech-domain-unit-test,它使用单元测试Dockerfile。

然后创建并启动镜像logcorner.edusync.speech.domain.unittest

e1480c2d37f233113cc2fb174e3f363f.png

docker-compose.override-unit-tests文件

这个文件覆盖了docker-compose-unit-tests文件,所以我添加了一个ASPNETCORE_ENVIRONMENT和一个入口点来运行单元测试

c5e6a81a137708614645b5a774d2120e.png

构建单元测试项目

要构建单元测试项目,我可以运行以下命令:

docker-compose -f docker-compose-unit-tests.yml -f docker-compose.override-unit-tests.yml build

a97931d05c853e7244ce8e5647fe1535.png

构建将创建一个镜像logcorner-edusync-speech-domain-unit-test:latest。

让我们使用以下命令以交互模式运行镜像logcorner-edusync-speech-domain-unit-test:latest:

docker run –rm -it logcorner-edusync-speech-domain-unit-test:latestls -la

71362bc5085002762665790f4203fa1a.png

让我们运行单元测试

dotnet test –logger “trx;LogFileName=.\domain-tests\tests-results-domain.xml”

7a3a0769ab4d3a5ffdacc85da323e650.png

ls -lacd TestResultsls -lacd domain-testsls

a1f99938fc519262f92df48ebaec1ecb.png

我应该在名为tests-results-domain.xml的容器中看到一个文件

我可以使用以下命令编辑tests-results-domain.xml文件。

cat tests-results-domain.xmlexit

然后如果我再次启动容器,tests-results-domain.xml文件应该消失。

docker run –rm -it logcorner-edusync-speech-domain-unit-test:latestls -la

9414a5be4724d6f1de1bbd3c4bd51919.png

发布测试结果

因为当容器停止运行时测试结果文件(tests-results-domain.xml)消失了,所以我必须在docker容器和主机之间共享tests-results-domain.xml文件。

因此,我将在主机上创建一个文件夹,并将其映射到docker容器内包含测试结果的文件夹。

我必须在docker-compose文件中添加这样的卷:

volumes:– ./TestResults/tests-results-domain:/domain-tests

并且,我在容器的domain-tests和主机的tests-results-domain之间创建了一个卷映射。

volumes:
– ./tests-results-domain:/domain-tests

6fb42077e92bb91dcc191cd6d1856163.png

运行单元测试项目

要运行单元测试,我必须运行以下命令:

docker-compose -f docker-compose-unit-tests.yml -f docker-compose.override-unit-tests.yml up

ff53b6b32b99d7b0e44a24115def03b0.png

6d440e26bd83df5b9d77bbeedb63fcab.png

我应该在主机上创建一个tests-results-domain文件夹,这个文件夹应该包含测试结果。

在我的CI/CD管道中,我将使用主机上的TestResults文件夹来发布测试结果

容器化其他UnitTest项目

为了容器化其他单元测试项目(infrastructure, presentation, application),我遵循与领域单元测试相同的场景

你可以在这里找到整个docker-compose-unit-tests.yml和docker-compose.override-unit-tests.yml文件

88b937f3917894c7689b1717039ef649.png

8a46f80269c05be6f94e3984f5f4a177.png

要构建和运行所有单元测试,我必须运行以下命令:

docker-compose -f docker-compose-unit-tests.yml -f docker-compose.override-unit-tests.yml builddocker-compose -f docker-compose-unit-tests.yml -f docker-compose.override-unit-tests.yml up

8be81ac8ff8ffdfbdef25153f204ee0f.png

源代码可在此处获得:

https://github.com/logcorner/LogCorner.EduSync.Speech.Command/tree/Task/DockerUnitTesting

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295865.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【iOS-Cocos2d游戏开发之二十】精灵的基础知识点总汇(位图操作/贴图更换/重排z轴等)以及利用CCSprite与CCLayerColor制作简单遮盖层!...

为什么80%的码农都做不了架构师?>>> 李华明Himi 原创,转载务必在明显处注明: 转载自 【黑米GameDev街区】 原文链接: http://www.himigame.com/iphone-cocos2d/516.html 最近写了不少Cocos2d的博文了,那么由于Himi介绍的一般都是…

学计算机的做近视眼手术,长期的电脑工作者,也可以做近视眼手术矫正视力吗?...

随着信息化时代的来临,电脑成为了人们的生活中不可缺少的一种工具,无论是平时的娱乐还是办公室办公都需要用到电脑。特别是对于长期需要使用电脑办公的人来说更是离不开电脑。那么在长期需要面对电脑的情况下还可以做手术来矫正近视眼吗?会不…

Android之编程中存在性能影响的主要方面

1.循环中; 1)在重要的循环里,消除循环终止判断时的方法调用。 例如:将 for(int i=0; i<collection.size();i++){ ... } 替换为… 尽量减少对变量的重复计算 for(int i=0; n=collection.size();i<n;i++){...} 2) 通常把大循环放在里面,把小循环放在外面 例如:将 for…

中柏平板u盘启动_大冶深圳东莞平板硫化机推选得新科技自动化

大冶深圳东莞平板硫化机推选得新科技自动化东莞市得新科技有限公司, 在国内外的销售机器公司。公司位于广东省东莞市。企业致力于点胶设备&#xff0c;硅胶设备&#xff0c;纺织品涂层的先进技术、检测经验发展国外&#xff0c;全面提升国外产品质量&#xff0c;推动国内行业健…

Console-算法-递归算法示例

ylbtech-Arithmetic:Console-算法-递归算法示例1.A&#xff0c;案例-- -- ylb&#xff1a;算法-- type&#xff1a;递归算法-- thankyou:sunshine, 谢谢你的默默付出-- 10:50 2012-04-06-- 1.B&#xff0c;解决方案1.B.1,阶乘 using System;namespace ConsoleApplication1 {cla…

如何才能避免聚会尬聊

全世界只有3.14 % 的人关注了爆炸吧知识如何丰富空闲时光&#xff1f;如何在短时间内获取最最专业的文化、艺术&#xff1f;小编给大家推荐几个公众号它们有趣有颜有料长按二维码&#xff0c;选择“识别图中二维码”关注印客美学id&#xff1a;inkbetter△长按二维码“识别”关…

Excel快速改变行列的次序

改变行列次序是在Excel中常常需要进行的操作&#xff0c;多数用户的方法是先剪切要调整的行或列&#xff0c;然后选定目标位置&#xff0c;单击菜单“插入”→“剪切单元格”。事实上&#xff0c;使用键盘来配合的话&#xff0c;改变行列的次序可以更快捷。比如&#xff0c;在图…

.NET6 如期⽽⾄

.NET6大家好&#xff0c;经过多个月的迭代&#xff0c;.NET 6正式版如期和大家见面了&#xff01;你安装好了吗&#xff1f;还是等等党&#xff1f;希望看完这篇文章你会对.NET 6有更多了解。自2014年11月12日宣布开源后&#xff0c;.NET就成为了一个跨平台、面向多场景的技术。…

Wordpress 提速之 Gzip 压缩

今天来聊下 wordpress 提速&#xff0c;其实关于这方面的话题网上其实蛮多的&#xff0c;速度对一个网站来说无疑是非常重要的&#xff0c;对于速度的追求也是无止境的&#xff0c;在这方面的表率无疑就是 shawn 了&#xff0c;看他博客的很多技巧都是针对速度来的……不过话说…

html弹性盒子垂直排列,css3弹性盒子布局

css3弹性盒子布局CSS3 弹性盒( Flexible Box 或 flexbox)&#xff0c;是一种当页面需要适应不同的屏幕大小以及设备类型时确保元素拥有恰当的行为的布局方式。引入弹性盒布局模型的目的是提供一种更加有效的方式来对一个容器中的子元素进行排列、对齐和分配空白空间。display:f…

忍“乳”负重,身材好的女孩子究竟有多不容易?我从科学的角度算出来了……...

全世界只有3.14 % 的人关注了爆炸吧知识大家好&#xff0c;满肚子奇怪知识&#xff0c;用科学眼光看世界的小编又来了。先问大家一个问题&#xff1a;你最喜欢看女孩子的哪里&#xff1f;相信不少人&#xff0c;不论男女都想到了一个地方。不论男女&#xff0c;都希望自己能“大…

getchar()到底怎么用_怎样才能真正发挥肥效,腐植酸水溶肥到底怎么用

施肥是农业生产中的重要环节&#xff0c;不管是大田作物还是花草苗木&#xff0c;水肥充足才能健康生长。而施肥不是看用了多少&#xff0c;而是看转化率&#xff0c;有多少真正被植物所吸收利用。许多化肥看着一大袋一大袋的用&#xff0c;结果都浪费了或者造成徒长一点用处都…

Windows API GetVersionEx()判断系统版本详解

转载自:http://bbs.7boo.com.cn/thread-8093-1-1.htmlAF注:TCHAR cstCSDVersion[128];sprintf(cstCSDVersion,"%s",os.szCSDVersion);//spkWindows API 中有两个函数可以得到系统版本信息&#xff1a;GetVersion和GetVersionEx。 GetVersion这个函数曾经困扰了…

Android之Json转换利器Gson之实例一-简单对象转化和带泛型的List转化

看代码可以最快速学习 实体类 public class Student {private int id;private String name;private Date birthDay;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this…

可视化ASP.Net Core Web API健康检查

前言ASP.NET Core提供运行状况检查Middleware和库&#xff0c;以便于报告应用的运行状况。使用方式也很简单。引用Nuget包Microsoft.Extensions.Diagnostics.HealthChecks。然后修改Startup.cs文件:public void ConfigureServices(IServiceCollection services) {...services.A…

利用网站模板创建子网站

1. 打开顶层站点&#xff0c;进入网站内容&#xff0c;最底部&#xff0c;子站点-->新建子网站 2.配置如下&#xff1a; 3. 可能会出现的BUG http://blog.csdn.net/chenxinxian/article/details/12189293 4, 解决方法&#xff1a;安装或卸载用于SharePoint的Reporting Servi…

Firefox 10正式发布

Firefox 10是Firefox的首个长期支持版本&#xff08;Extended Support Release&#xff09;&#xff0c;Firefox 10的支持周期为1年&#xff0c;不会增添新功能&#xff0c;仅会提供安全性更新。经过6个Beta测试&#xff0c;Firefox 10正式版今天终于发布了。 Firefox 10新特性…

计算机PS英语词汇,操作计算机必读(必会)的53个英文单词共享

PC&#xff1a;个人计算机Personal ComputerCPU&#xff1a;中央处理器Central Processing UnitCPU Fan&#xff1a;中央处理器的“散热器”(Fan)MB&#xff1a;主机板MotherBoardRAM&#xff1a;内存Random Access Memory&#xff0c;以PC-代号划分规格&#xff0c;如PC-133&a…

解锁一个新技巧,让你舒服到不想起床

▲ 点击查看每天睡个好觉&#xff0c;真的是一件很爽的事情。怎样才能做到这么爽呢&#xff1f;答案当然是好好挑选我们的床上伴侣——床品四件套啦~在所有的床品中&#xff0c;四件套绝对是刚需&#xff0c;并且至少需要两套以上用来替换。如果有人问你挑选四件套的标准是什么…

面试常见问题_软件实施工程师面试中的常见问题都有哪些呢?

软件实施工程师面试中的常见问题都有哪些呢&#xff1f;首先需要看你自己找什么样的工资&#xff0c;是新手呢还是老手呢&#xff1f;对于软件实施的一些新手来说&#xff0c;那么相对应来说要看重的是人品的一个问题&#xff0c;因为毕竟他们家的是新手&#xff0c;所以对于一…