以前测试都是新建一个控制台测试的方式来进行,感觉版本管理啥的非常麻烦。也是非常原始的办法。后来想以前有写过测试单元,不过好久没弄了。Nuget了NUnit后写了正式的第一个测试类。

测试用例:

测试事件触发是否是并行的;公司项目经常使用一个自定义的线程池(只有一个工作线程的线程池)内部维护一个Queue,先进队列的数据先放入队列然后再抛给另外一个事件。

测试结果:

事件是支持并行的,事件对应的委托方法是支持多播的。

测试代码

 

using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Threading.Tasks;
using System.Diagnostics; namespace WinLabelPrinter.Tests
{
[TestClass()]
public class BarcodeDesignFormTests
{
volatile int index = 0;
public event Action<string, Stopwatch> OnExecScanReceived; [TestMethod()]
public void EventParallelTest()
{
this.OnExecScanReceived += BarcodeDesignFormTests_OnExecScanReceived;
Action demo = () =>
{
string data = Guid.NewGuid().ToString().Replace("-", "");
Stopwatch sw = new Stopwatch();
sw.Start();
OnExecScanReceived?.Invoke(data, sw);
};
while (index < 10001)
demo.BeginInvoke(null, null);
Assert.IsTrue(index % 2 == 0);
} object lockObj = new object(); private void BarcodeDesignFormTests_OnExecScanReceived(string arg1, Stopwatch arg2)
{
while (index < 10001)
{
lock (lockObj)
{
index++;
}
}
arg2.Stop();
//Console.WriteLine(DateTime.Now + "->" + "OnExecScanReceived:" + arg1 + ",耗时:" + arg2.ElapsedMilliseconds);
}
}
}

  

测试花絮

刚开始以为index的值是10000,但是调试发现实际是10002。发现我的电脑是双核,所以TPL启动了2个并行的线程。我换成Parallel.Invoke(demo,demo,demo,demo);这样也是10002。所以把断言改成“Assert.IsTrue(index % 2 == 0);”这样子了,测试通过。

 

NUnit实战,第一个测试类,测试事件触发是否是并行的的更多相关文章

  1. 创建一个抽象的员工类, 抽象开发累继承员工类,JavaEE ,和安卓继承开发类在测试类中进行测试

    /* 1 定义一个员工类  所有的子类都抽取(抽象类)  Employee            属性:姓名  工号(生成get  set  )       方法:工作  抽象     2 定义一个研 ...

  2. python调用HTMLTestRunner+unittest实现一次执行多个测试类,并生成与每个测试类对应的测试报告,具体看代码,附上整个project代码

    python自动化框架雏形,根据自己需要封装:ui自动化,接口自动化均可适用,python版本为python3.x,不要问我为什么不用python2.x,附上整个project代码:http://fi ...

  3. java 编程基础:【注解】 提取注解信息,利用自定义注解编写测试类,注解绑定事件

    提取注解信息 使用注解修饰了类.方法.成员变量等成员之后,这些注解不会自己生效,必须由开发者提供相应工具来提取并处理注解信息.   Java使用java.lang.annotation.Annotat ...

  4. JUit——(三)JUnit核心对象(测试、测试类、Suit和Runner)

    JUnit的核心对象:测试.测试类.测试集(Suite).测试运行器 1. 测试: @Test注释的.公共的.不带有任何参数.并且返回void类型的方法 2. 测试类: 公共的,包含对应类的测试方法的 ...

  5. Randoop测试类和方法(用例自动生成)

    详细使用方法见randoop官网: https://randoop.github.io/randoop/manual/index.html 测试程序之前,先检测下你的Randoop是否配置好: 打开c ...

  6. 关于Application_End 与 Application_Start事件触发情况的测试(待续)

    测试项目搭建 定义一个简单的Mvc项目,有如下文件: (1) public class Startup { public void Configuration(IAppBuilder app) { a ...

  7. 测试框架Unitest的运行原理,以及多个测试类中的执行顺序以及简化方法

    单元测试单元测试(unit testing)是指对软件中的最小可测试单元进行检查和验证.对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一 ...

  8. mongoDB工具类以及测试类【java】

    java操作mongo工具类 package Utils; import com.mongodb.MongoClient; import com.mongodb.MongoCredential; im ...

  9. etcd简单测试类java版

    为了方便现场安装完了etcd集群后确认集群是否好用,简单写了个测试类,网上搜的有点乱还有些不能运行,在这里再整理一个能够直接运行的 1.我把etcd的API设成3版本了,调用使用的jetcd,功能挺多 ...

随机推荐

  1. JDBC详解系列(二)之加载驱动

    ---[来自我的CSDN博客](http://blog.csdn.net/weixin_37139197/article/details/78838091)---   在JDBC详解系列(一)之流程中 ...

  2. Android 从零搭建简单MVP Demo

    首先简单介绍一下MVP的构成及优缺点: MVP的全称为Model-View-Presenter, Model提供数据(网络请求.数据存储等): View负责页面显示: Presenter负责逻辑的处理 ...

  3. 五.Spring与RabbitMQ集成--HelloWorld

    spring对RabbitMQ做了很好的集成,我们称之为spring AMQP,其官方文档写得十分详尽,文档地址:https://docs.spring.io/spring-amqp/referenc ...

  4. Android-Dalvik指令集

    转载请标明出处:http://blog.csdn.net/goldenfish1919/article/details/40821777 原文:http://pallergabor.uw.hu/and ...

  5. Android中使用ContentProvider进行跨进程方法调用

    原文同一时候发表在我的博客 点我进入还能看到很多其它 需求背景 近期接到这样一个需求,须要和别的 App 进行联动交互,比方下载器 App 和桌面 App 进行联动.桌面的 App 能直接显示下载器 ...

  6. 十二、 Spring Boot 静态资源处理

    spring Boot 默认为我们提供了静态资源处理,使用 WebMvcAutoConfiguration 中的配置各种属性. 建议大家使用Spring Boot的默认配置方式,如果需要特殊处理的再通 ...

  7. 自学Zabbix3.6.2-触发器triggers severity严重程度

    触发器严重性定义了触发器的重要性. 1. zabbix支持以下触发级别: SEVERITY DEFINITION 颜色 Not classified 未知. 灰色 Information 一般信息. ...

  8. 工作随笔——spring异步处理@Async使用笔记

    @Async使用笔记 必须是public方法 必须是非static方法 方法调用的实例必须由spring创建和管理 代码示例如下: // 创建Foo类@Component class Foo { @A ...

  9. OC学习12——字符串、日期、日历

    前面主要学习了OC的基础知识,接下来将主要学习Foundation框架的一些常用类的常用方法.Foubdation框架是Cocoa编程.IOS编程的基础框架,包括代表字符串的NSString(代表字符 ...

  10. boost::algorithm(字符串算法库)

    没什么说的,需要 #include<boost/algorithm/string.hpp> 1.大小写转换 std::string s("test string"); ...