C# 在单元测试C中如何在多个线程中重复运行TestMethod#

C# 在单元测试C中如何在多个线程中重复运行TestMethod#,c#,multithreading,unit-testing,C#,Multithreading,Unit Testing,我有TestMethod,我需要在不同的N线程中运行它N次。我想这样做是为了测试我的WebMethod的行为——我可以在一瞬间从不同的线程获得多个请求 如何在单元测试C中的多个线程中重复运行TestMethod?如何设置TestMethod的调用量?最简单的方法是: 创建一个testmethod,该方法只运行一次测试 创建LoadTest单元测试,并将testmethod指定为唯一的测试 设置要同时运行的测试数。最简单的方法是: 创建一个testmethod,该方法只运行一次测试 创建LoadT

我有TestMethod,我需要在不同的N线程中运行它N次。我想这样做是为了测试我的WebMethod的行为——我可以在一瞬间从不同的线程获得多个请求


如何在单元测试C中的多个线程中重复运行TestMethod?如何设置TestMethod的调用量?

最简单的方法是:

创建一个testmethod,该方法只运行一次测试

创建LoadTest单元测试,并将testmethod指定为唯一的测试


设置要同时运行的测试数。

最简单的方法是:

创建一个testmethod,该方法只运行一次测试

创建LoadTest单元测试,并将testmethod指定为唯一的测试


设置要同时运行的测试数。

可以通过创建N个任务,启动所有任务,然后等待它们完成来完成。您可以在任务内部使用Assert方法,当任务失败时,将抛出AssertionFailedException,并且您可以在使用async/await时在父线程上轻松捕获该方法。我相信MsTest支持Visual Studio 2012(或2013)中测试方法的async关键字。大概是这样的:

// no TestMethod attribute here
public Task TestMyWebMethodAsync() 
{
    return Task.Run(() => 
      {
        // add testing code here
        
        Assert.AreEqual(expectedValue, actualValue);
      });                
}

[TestMethod]
public async void ParallelTest() 
{
    try {
        const int TaskCount = 5;
        var tasks = new Task[TaskCount];
        for (int i = 0; i < TaskCount; i++) 
        {
            tasks[i] = TestMyWebMethodAsync();
        }
        
        await Task.WhenAll(tasks);
        
    // handle or rethrow the exceptions
    } catch (AssertionFailedException exc) {
        Assert.Fail("Failed!");
    } catch (Exception genericExc) {
        Assert.Fail("Exception!");
    }
}
//此处没有TestMethod属性
公共任务TestMyWebMethodAsync()
{
返回任务。运行(()=>
{
//在这里添加测试代码
Assert.AreEqual(期望值、实际值);
});                
}
[测试方法]
公共异步void ParallelTest()
{
试一试{
const int TaskCount=5;
var tasks=新任务[TaskCount];
对于(int i=0;i
如果您有Visual Studio的高级或最终版本,则可以通过创建负载测试来简化此过程:


您可以创建N个任务,启动所有任务,然后等待它们完成。您可以在任务内部使用Assert方法,当任务失败时,将抛出AssertionFailedException,并且您可以在使用async/await时在父线程上轻松捕获该方法。我相信MsTest支持Visual Studio 2012(或2013)中测试方法的async关键字。大概是这样的:

// no TestMethod attribute here
public Task TestMyWebMethodAsync() 
{
    return Task.Run(() => 
      {
        // add testing code here
        
        Assert.AreEqual(expectedValue, actualValue);
      });                
}

[TestMethod]
public async void ParallelTest() 
{
    try {
        const int TaskCount = 5;
        var tasks = new Task[TaskCount];
        for (int i = 0; i < TaskCount; i++) 
        {
            tasks[i] = TestMyWebMethodAsync();
        }
        
        await Task.WhenAll(tasks);
        
    // handle or rethrow the exceptions
    } catch (AssertionFailedException exc) {
        Assert.Fail("Failed!");
    } catch (Exception genericExc) {
        Assert.Fail("Exception!");
    }
}
//此处没有TestMethod属性
公共任务TestMyWebMethodAsync()
{
返回任务。运行(()=>
{
//在这里添加测试代码
Assert.AreEqual(期望值、实际值);
});                
}
[测试方法]
公共异步void ParallelTest()
{
试一试{
const int TaskCount=5;
var tasks=新任务[TaskCount];
对于(int i=0;i
如果您有Visual Studio的高级或最终版本,则可以通过创建负载测试来简化此过程:


可能将您的代码移动到“正常”方法,在测试方法中执行线程将起作用。可能将您的代码移动到“正常”方法,在测试方法中执行线程将起作用。“异步无效”单元测试不能被VS识别为单元测试。此问题在此处描述为“异步无效”VS无法将单元测试识别为单元测试。此处描述了此问题