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

时间:2014-09-16 14:11:18

标签: c# multithreading unit-testing

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

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

2 个答案:

答案 0 :(得分:3)

恕我直言的最简单方法是:

创建一个运行测试的testmethod。

创建一个LoadTest单元测试并指定您的测试方法,因为它只是测试。

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

答案 1 :(得分:1)

你可以通过创建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!");
    }
}

如果您拥有Visual Studio的Premium或Ultimate版本,那么您可以通过创建负载测试来简化这一过程:

http://msdn.microsoft.com/en-us/library/ms182594.aspx