Multithreading 如何处理存储库的多线程单元测试以模拟并发性?
我正在构建一个mvc3应用程序,该应用程序应该能为大约1000-2000个并发用户提供服务, 我实现了CastleActive Record和simple repository模式,现在我需要对所有这些进行单元测试,以确保它不会在并发性和iis等多线程环境中崩溃。 我该怎么做 我正在使用nunit测试框架 我的存储库: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
//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应用程序的并发访问: