最近在一个asp.net core web项目中使用TDD的方式开发,结果单元测试超过128个之后,在CI中报错了:“The configured user limit (128) on the number of inotify instances has been reached.” 在本地却是正常的,如此诡异的事,必定要搞清楚。

于是,从报错信息着手,一番Google无果之后,不得不冷静思考,报错的原因在哪里?通过异常信息定位到了是因为在测试中,每个测试都要开启一个TestServer,相当于运行一个站点,在站点Setup的时候,需要监听配置文件,在unix系统中是通过一个inotify的东西实现监听的,因此当监听那个配置文件的次数达到系统上限(CI服务器是128)就会抛出一个IO异常,而在本地却没有达到上限,因此是正常的。

既然问题的原因找到了,那么解决问题的思路也就明确了。

方案一:把CI服务器的限制调高

方案二:减少集成测试中开启TestServer的次数

对比这两种方案,第二种是最优解。

一般在跨平台的core中,我们大多使用xunit框架进行测试,在xunit官方文档中,我发现有一节“Shared Context between Tests”,在各个测试中共享一个上下文,大家对上下文的概念应该不陌生,“It is common for unit test classes to share setup and cleanup code (often called "test context"). ”这里是指单元测试中需要共享的启动和清除代码,在我的项目中就是每个测试都需要开启的TestServer(运行asp.net core web站点服务),只要把TestServer放在上下文中就可以在单元测试中共享,不需要每个测试开启一次,那么就会大大减少TestServer的实例个数。

稍微注意一点:在xunit框架中,单元测试默认是Test Collections级别的并发测试,默认一个类算一个Test Collections,那么类与类之间是并发的,而一个类中的所有的单元测试是串行的。当然所有的默认值都能自定义,详见:https://xunit.github.io/docs/running-tests-in-parallel.html

实现我们的解决方案,其实很简单,就是使用xunit中的IClassFixture<>,下面引用一个官方文档中的例子,

public class DatabaseFixture : IDisposable
{
public DatabaseFixture()
{
Db = new SqlConnection("MyConnectionString"); // ... initialize data in the test database ...
} public void Dispose()
{
// ... clean up test data from the database ...
} public SqlConnection Db { get; private set; }
} public class MyDatabaseTests : IClassFixture<DatabaseFixture>
{
DatabaseFixture fixture; public MyDatabaseTests(DatabaseFixture fixture)
{
this.fixture = fixture;
} // ... write tests, using fixture.Db to get access to the SQL Server ...
}

MyDatabaseTests中的所有单元测试都会共享一个DatabaseFixture实例。

然而,在我的项目中,使用了ABP框架,它封装的AbpAspNetCoreIntegratedTestBase<>并不能直接用IClassFixture<>,因此只能把ABP的源码签下来,自己修改一下,然后打包成Nuget包,发布到自己的源中。最后,顺便给ABP提交一个PullRequest

单元测试过多,导致The configured user limit (128) on the number of inotify instances has been reached.的更多相关文章

  1. .net core 发布linux报错“The configured user limit (128) on the number of inotify instances has been reached”

    https://stackoverflow.com/questions/45875981/error-while-reading-json-file-in-dotnet-core-the-config ...

  2. VSCode 出现错误 System.IO.IOException: The configured user limit (128) on the number of inotify instances has been reached.

    方案一: sudo vim /etc/sysctl.conf 增加下面内容(环境变量) fs.inotify.max_user_watches = 1638400 fs.inotify.max_use ...

  3. XCode编译文件过多导致内存吃紧解决方法

    XCode编译文件过多导致内存吃紧解决方法 /Users/~~/Library/Developer/Xcode/DerivedData 1) 然后 找到编译文件 删除 就好了哦 快去试试看吧

  4. [BTS] BizTalk host BizTalkServerApplication throttled because DatabaseSize exceeded the configured throttling limit.

    Log Name: ApplicationSource: BizTalk ServerDate: 7/22/2013 6:10:38 PMEvent ID: 7001Task Category: Bi ...

  5. Linux下php-fpm进程过多导致内存耗尽问题

    这篇文章主要介绍了解决Linux下php-fpm进程过多导致内存耗尽问题,需要的朋友可以参考下   最近,发现个人博客的Linux服务器,数据库服务经常挂掉,导致需要重启,才能正常访问,极其恶心,于是 ...

  6. echarts x轴标签文字过多导致显示不全

    原文电梯:https://blog.csdn.net/kebi007/article/details/68488694 echarts x轴标签文字过多导致显示不全 如图: 解决办法1:xAxis.a ...

  7. 事故记录:php-cgi进程过多导致系统资源耗尽

    事故现象:机房一台服务器运行一段时间后,突然发现系统资源即将被耗尽! 1)top命令查看一下系统的cpu ram swap的使用情况 由上图分析,可以看出1--共有602个进程,但其中有601个进程休 ...

  8. Spark使用CombineTextInputFormat缓解小文件过多导致Task数目过多的问题

    目前平台使用Kafka + Flume的方式进行实时数据接入,Kafka中的数据由业务方负责写入,这些数据一部分由Spark Streaming进行流式计算:另一部分数据则经由Flume存储至HDFS ...

  9. 疑难杂症--在Windows Server 2008 R2上运行SQL Server 2008情况下,CPU过多导致的问题

    64位的Windows7和Windows Server 2008 R2为了能够在一台机器上,支持超过64个逻辑CPU, 引入了Processor Group这个概念.Processor Group会把 ...

随机推荐

  1. JS奇淫巧技:防抖函数与节流函数

    应用场景 实际工作中,我们经常性的会通过监听某些事件完成对应的需求,比如: 通过监听 scroll 事件,检测滚动位置,根据滚动位置显示返回顶部按钮 通过监听 resize 事件,对某些自适应页面调整 ...

  2. 《javascript语言精粹》读书笔记 Item2 对象

    第三章 对象 JavaScript的简单数据类型包括数字.字符串.布尔值(true和false).null值和undefined值.其他 数字.字符串和布尔值"貌似"对象,因为它们 ...

  3. 玩转spring MVC(八)----spring MVC整合json

    这篇文章在前边项目的基础上来整合json,最新项目资料见:http://download.csdn.net/detail/u012116457/8436187 首先需要的jar包:jackson-co ...

  4. Java 学习笔记 (二) Selenium WebDriver Java 弹出框

    下面这段实例实现了以下功能: 1. profile使用用户本地电脑上的 (selenium 3有问题.因为selenium 3把profile复制到一个temp文件夹里,但并不复制回去.所以每次打开仍 ...

  5. TestNG entryset的用法及遍历map的用法

    以下内容引自 http://blog.csdn.net/bestone0213/article/details/47904107  (注: 该 url不是原出处.其博主注明转载,但未注明转自何处) k ...

  6. 运用BT在centos下搭建一个博客论坛

    在日常的工作和学习中,我们都很希望有自己的工作站,就是自己的服务器,自己给自己搭建一个博客或者是论坛,用于自己来写博客和搭建网站论坛.现在我们就用一个简单的方法来教大家如何30分钟内部署一个博客网站. ...

  7. http.go

    )         }         if name != cfgName {             continue         }         return val.FieldByNa ...

  8. 【bzoj 2916】[Poi1997]Monochromatic Triangles

    题目描述        空间中有n个点,任意3个点不共线.每两个点用红线或者蓝线连接,如果一个三角形的三边颜色相同,那么称为同色三角形.给你一组数据,计算同色三角形的总数.          输入 第 ...

  9. BZOJ_4867_[Ynoi2017]舌尖上的由乃_分块+dfs序

    BZOJ_4867_[Ynoi2017]舌尖上的由乃_分块+dfs序 Description 由乃为了吃到最传统最纯净的美食,决定亲自开垦一片菜园.现有一片空地,由乃已经规划n个地点准备种上蔬菜.最新 ...

  10. BZOJ_2039_[2009国家集训队]employ人员雇佣_ 最小割

    BZOJ_2039_[2009国家集训队]employ人员雇佣_ 最小割 Description 作为一个富有经营头脑的富翁,小L决定从本国最优秀的经理中雇佣一些来经营自己的公司.这些经理相互之间合作 ...