Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在xUnit中同步并发运行的测试?

如何在xUnit中同步并发运行的测试?
EN

Stack Overflow用户
提问于 2018-05-24 17:57:05
回答 1查看 585关注 0票数 0

我需要并行地启动几十个测试用例,但是有一个陷阱--它们都达到了一个点,即无论运行多少个测试用例,都应该只执行一个操作一次。一旦此操作结束,测试就可以恢复并继续独立运行。

现在,我在NUnit中有以下实现:

代码语言:javascript
运行
AI代码解释
复制
[TestFixture]
public class ScheduleJobTest
{
    private static readonly Subject<Unit> s_tickets = new Subject<Unit>();

    [OneTimeSetUp]
    public static void SetUp()
    {
        Task.Run(() => s_tickets
            .Throttle(TimeSpan.FromSeconds(1))
            .SelectMany(_ => PollSchedulesNow())
            .DefaultIfEmpty()
            .GetAwaiter()
            .GetResult());
    }

    [OneTimeTearDown]
    public static void TearDown()
    {
        s_tickets.OnCompleted();
    }

    private static IObservable<Unit> PollSchedulesNow()
    {
        // Do something that eventually unblocks all the test cases
    }

    [TestCaseSource(nameof(ProvideNamespaces)), Parallelizable(ParallelScope.Children)]
    public void ScheduleJob(NamespaceConnectionInfo nci)
    {
        // Do something
        s_tickets.OnNext(Unit.Default);
        // Resume - blocks until the actions of PollSchedulesNow take effect
    }

    private static IEnumerable<TestCaseData> ProvideNamespaces()
    {
        return ...
    }
}

每个测试用例都为应该只执行一次的特殊操作排队。节流确保只要票在最多一秒钟的时间间隔内到达,什么也不会发生。但一旦暂停发生,它就会触发这一特殊行动。如果出于某种原因,在暂停之后会有更多的测试用例,那么将再次调用特殊操作--这很好。我只是不希望在同时运行的100个并发测试用例中调用它100次。

这是我在NUnit中能想到的最好的了。是否有更好的方法在xUnit中实现它?或者我一开始就需要一个不同的框架?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-25 00:57:46

首先:不。除非您自己在测试中编写协调代码,否则在NUnit中无法跨测试进行协调。即使如此,您也必须确保NUnit将它们全部运行在一起,如果没有您的帮助,它可能会也可能不会这样做。

但是是的!你可以实现你想要的。您正在尝试使用多个NUnit测试来建模本质上是跨多个线程的单个测试。别干那事!编写一个测试,生成任意数量的独立线程。等待它们完成,然后验证操作只执行了一次。这里只有一个断言,哪种证明只有一个测试。

您可以对不同数量的线程和错误条件重复此操作,次数随您的喜好而定。每一个变体都是一个单一的测试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50520435

复制
相关文章
绕过CDN找到源站的思路
网上有很多绕过CDN的思路,但是存在很多问题,以下是收集并总结的思路。 站在站长的角度,不可能每个站都会用上CDN。 站在DNS服务商的角度,历史解析记录可能不受CDN服务商控制。 站在CDN服务商的角度,提供CDN服务的区域有限制,CDN流量有限制。
HACK学习
2019/08/06
1.8K0
MyBatisPlus注入公共Sql问题
转载自 https://blog.csdn.net/synsdeng/article/details/78354462
allsmallpig
2021/02/25
1.1K0
python找到多个字典中的公共键
python找到多个字典中的公共键 生成字典 from random import randint,sample s = 'abcdefg' s1 = {x:randint(1,4) for x in sample(s,randint(3,6))} s2 = {x:randint(1,4) for x in sample(s,randint(3,6))} s3 = {x:randint(1,4) for x in sample(s,randint(3,6))} 方案1:循环判断 res = [] fo
听城
2018/04/27
4.1K0
SpringMVC 参数注入
写一个web service, 总是400. 说是request有问题,server不识别。然而检查了很多次都没问题。最终问题指向spring对参数的解析和注入。 一个controller中可以自定义参数,只要参数和request的参数匹配就会自动注入。针对自定义POJO,显然是spring帮忙给new了一个新的,然后把参数扔进去。 测试发现,不是setter方法的问题。 最后,发现自己在POJO中添加了个构造函数但却么有声明无参构造函数,这样导致spring无法调用无参构造函数,于是bad request
Ryan-Miao
2018/03/13
8280
CA1062:验证公共方法的参数
外部可见方法取消引用其中一个引用参数,而不验证该参数是否 null(Visual Basic 中 Nothing)。
呆呆
2022/01/10
7310
jsdelivr静态公共库已开始DNS污染- 星泽V社
JSDelivr是一种特殊的CDN。 它旨在让用户下载npm和Github上托管JavaScript库,jsDelivr是一个开源的网站,提供免费的cdn加速加载资源。
星泽V社
2022/05/01
1.1K0
jsdelivr静态公共库已开始DNS污染- 星泽V社
SQL 注入类型详解
笔者最初学习 SQL 注入时,大家对于 SQL 注入类型的归类让我头脑一片混乱,后来笔者发现其实大家都是根据 sqlmap 上给出的“类型”来划分的。所以,今天在这里,笔者根据自己所学所知来对 SQL 注入进行一个分类,以及讲解一些在注入时十分重要而有用的知识,相信对初学者十分有用。
信安之路
2018/08/08
3.3K0
SQL 注入类型详解
Actframework依赖注入 II - 注入对象类型
1. 框架内置绑定 在ActFramework中有大量的服务和组件都可以直接使用依赖注入,其中包括 ActionContext - Encapsulate all data/info relevant to an HTTP request context H.Session - HTTP request session. Also available via actionContext.session() H.Flash - HTTP request flash. Also available via ac
老码农
2018/06/27
3140
1.2.2-SQL注入-SQL注入语法类型-报错注入
构造payload让信息通过错误提示回显出来 应用场景: 查询不回显内容,会打印错误信息 Update、insert等语句,会打印错误信息
tea9
2022/07/16
1.6K0
1.2.2-SQL注入-SQL注入语法类型-报错注入
30个免费且很棒的公共数据源分享
机器学习、人工智能、区块链、预测分析——所有令人惊叹的技术都承诺将革新商业和社会。
IT派
2018/07/30
1K0
30个免费且很棒的公共数据源分享
Spring-注入参数详解-[通过util命名空间简化集合类型的配置]
如果希望配置一个集合类型的Bean,而非一个集合类型的属性,则可以通过util命名空间进行配置。
小小工匠
2021/08/16
4700
Spring-注入参数详解-[集合类型属性]
java.util包中的集合类型是最常用的结构数据类型,主要包括List、Set、Map、Properties。
小小工匠
2021/08/16
4090
Spring-注入参数详解-[字面值及引用其他Bean]
在Spring配置文件中,不但可以将String、int等字面值注入bean中,还可以将集合、map等类型的数据注入Bean中, 此外还可以注入配置文件中其他定义的Bean.
小小工匠
2021/08/16
5150
解析类型参数
这个方法有效的原因是:向容量为零的切片追加元素将分配一个新的底层数组。函数体的长度最终比函数签名的长度要短,函数体短是一方面原因,函数签名长是另一方面原因。在本博客文章中,我们将解释为什么函数签名被写成这样。
孟斯特
2023/10/04
1560
解析类型参数
JVM参数类型
1. 标准参数 * -help * -server , -client * -version . -showversion * -cp , -classpath
用户1212940
2022/04/13
5930
JVM参数类型
解析类型参数
这个方法有效的原因是:向容量为零的切片追加元素将分配一个新的底层数组。函数体的长度最终比函数签名的长度要短,函数体短是一方面原因,函数签名长是另一方面原因。在本博客文章中,我们将解释为什么函数签名被写成这样。
孟斯特
2023/10/19
1710
解析类型参数
Spring-注入参数详解-[简化配置方式]
Spring为字面值、引用Bean和集合都提供了简化的配置方式,如果没有用到完整格式的特殊功能,大可使用简化的配置方式。
小小工匠
2021/08/16
2740
找到合适的模型参数提高准确度
如果一直在阅读有关数据科学或机器学习的知识,那么一定遇到与MNIST数据集一起使用的文章和项目。数据集包括一组70,000个图像,其中每个图像是从0到9的手写数字。决定使用相同的数据集来了解如何微调机器学习模型参数可以产生差异。
代码医生工作室
2019/06/21
7290
找到合适的模型参数提高准确度
点击加载更多

相似问题

MULTIPART_FORM_DATA:没有为公共javax.ws.rs.core.Response类型的参数找到注入源

113

无法注册泽西MultiPartFeature

12

泽西ModelValidationException -没有找到注入源

32

泽西3多部分功能没有注入源

115

MULTIPART_FORM_DATA:没有为类型响应的参数找到注入源

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文