Multithreading 如何处理存储库的多线程单元测试以模拟并发性?

Multithreading 如何处理存储库的多线程单元测试以模拟并发性?,multithreading,asp.net-mvc-3,unit-testing,concurrency,nunit,Multithreading,Asp.net Mvc 3,Unit Testing,Concurrency,Nunit,我正在构建一个mvc3应用程序,该应用程序应该能为大约1000-2000个并发用户提供服务, 我实现了CastleActive Record和simple repository模式,现在我需要对所有这些进行单元测试,以确保它不会在并发性和iis等多线程环境中崩溃。 我该怎么做 我正在使用nunit测试框架 我的存储库: //interface public interface IAbstractRepository<T> where T : class { void Crea

我正在构建一个mvc3应用程序,该应用程序应该能为大约1000-2000个并发用户提供服务, 我实现了CastleActive Record和simple repository模式,现在我需要对所有这些进行单元测试,以确保它不会在并发性和iis等多线程环境中崩溃。 我该怎么做

我正在使用nunit测试框架

我的存储库:

//interface
public interface IAbstractRepository<T> where T : class
{
    void Create(T model);
    void Update(T model);
    void Delete(T model);
    int Count();

    T FindById(object id);
    T FindOne(params ICriterion[] criteria);
    IList<T> FindAll();
    IList<T> FindAllByCriteria(params ICriterion[] criteria);
}
//接口
公共接口IAbstractRepository,其中T:class
{
空洞生成(T型);
空洞更新(T模型);
无效删除(T型);
int Count();
T FindById(对象id);
T FindOne(参数ICriterion[]标准);
IList FindAll();
IList FindAllByCriteria(params ICriterion[]标准);
}
//具体实施

public class AbstractRepository<T> : IAbstractRepository<T> where T : class
{
    void IAbstractRepository<T>.Create(T model)
    {
        ActiveRecordMediator<T>.Save(model);
    }

    void IAbstractRepository<T>.Update(T model)
    {
        ActiveRecordMediator<T>.Update(model);
    }

    void IAbstractRepository<T>.Delete(T model)
    {
        ActiveRecordMediator<T>.Delete(model);
    }

    int IAbstractRepository<T>.Count()
    {
        return ActiveRecordMediator<T>.Count();
    }

    T IAbstractRepository<T>.FindById(object id)
    {
        return ActiveRecordMediator<T>.FindByPrimaryKey(id);
    }

    T IAbstractRepository<T>.FindOne(params ICriterion[] criteria)
    {
        return ActiveRecordMediator<T>.FindOne(criteria);
    }

    IList<T> IAbstractRepository<T>.FindAll()
    {
        return ActiveRecordMediator<T>.FindAll();
    }

    IList<T> IAbstractRepository<T>.FindAllByCriteria(params ICriterion[] criteria)
    {
        return ActiveRecordMediator<T>.FindAll(criteria);
    }
}
public class AbstractRepository:IAbstractRepository其中T:class
{
void IAbstractRepository.Create(T模型)
{
ActiveRecordMediator.Save(模型);
}
void IAbstractRepository.Update(T模型)
{
ActiveRecordMediator.Update(模型);
}
作废IAbstractRepository.Delete(T型)
{
ActiveRecordMediator.Delete(模型);
}
int IAbstractRepository.Count()
{
返回ActiveRecordMediator.Count();
}
T IAbstractRepository.FindById(对象id)
{
返回ActiveRecordMediator.FindByPrimaryKey(id);
}
T IAbstractRepository.FindOne(参数ICriterion[]标准)
{
返回ActiveRecordMediator.FindOne(条件);
}
IList IAbstractRepository.FindAll()
{
返回ActiveRecordMediator.FindAll();
}
IList IAbstractRepository.FindAllByCriteria(参数ICriterion[]标准)
{
返回ActiveRecordMediator.FindAll(条件);
}
}

这不再是一个单元测试,您正在尝试做什么。这是一个负载测试。有一些工具允许您记录一些场景,然后模拟对执行此场景的web应用程序的并发访问:


假设性问题:在这里,我如何使用多线程方法为我模拟许多用户,至少向我展示一个代码示例?在我使用这些很酷的工具之前+答案很好,没有密码。其思想是,这些工具允许您记录使用web应用程序的场景。然后将它们配置为在负载下执行此场景。它们将负责生成线程和修改web应用程序。显然,您的应用程序需要首先部署,以便测试更加真实。您可以有一个特定的环境来执行此类测试。在生产环境中启动它们并不总是一个好主意。因此,例如,如果我看到并发错误问题,我应该如何处理?例如,我想用两个线程更新一些用户详细信息-他来自网站,同时我想更新他的数据,因为他来自iphone应用程序。我应该如何处理这种情况?请给我举一个在asp.net-mvc3应用程序中使用多线程的例子,代码示例将非常好:)我不明白你们在说什么线程。ASP.NET会自动为您处理线程,因此您无需担心。当请求到达时,运行库将负责处理该请求。我也不明白你要的是什么样的多线程示例。在ASP.NET MVC中,您可以编写处理用户请求的控制器操作。如果两个用户请求并行出现,将生成此控制器的两个不同实例来处理它们。如果您在此控制器操作中访问数据库,则由数据库来处理这种情况。