运行 2013 年 运行 单元测试时的其他项目

Run other project when running unit tests in Visual Studio 2013

我有一些相互依赖的 VS 项目设置。简化一下,想象一下这些项目:

  1. API 项目 (ASP.NET WebAPI 2)
  2. DummyBackendServer(带有 WCF 服务的 WinForms)
  3. API.Test 项目(应该测试 API-项目控制器的单元测试项目)

通常会有(例如)android 客户端连接到 API-服务器 (1) 并请求一些信息。然后 API-Server 将连接到 DummyBackendServer (2) 以请求这些信息,生成适当的格式并向 android 客户端发送应答。

现在我需要为 API-Server 创建一些单元测试。我的问题是,当它 运行 进行单元测试时,我找不到告诉 VS 启动 DummyBackendServer (2) 的方法。当我第一次启动 DummyServer 时,我无法 运行 测试,因为菜单选项是灰色的。

那么,有没有办法告诉 VS 启动测试所依赖的另一个项目?

您应该在您的项目中使用 IoC 容器或类似的东西,这样您就可以在 运行 单元测试的同时获得其他项目的 mock

你会 select 哪一个取决于你,我个人使用 Rhino.Mocks:

  1. 创建模拟存储库:
MockRepository mocks = new MockRepository();
  1. 将模拟对象添加到存储库:
 ISomeInterface robot = (ISomeInterface)mocks.CreateMock(typeof(ISomeInterface));  
 //If you're using C# 2.0, you may use the generic version and avoid upcasting:

 ISomeInterface robot = mocks.CreateMock<ISomeInterface>();
  1. "Record" 您希望在模拟对象上调用的方法:
// this method has a return type, so wrap it with Expect.Call
Expect.Call(robot.SendCommand("Wake Up")).Return("Groan");

// this method has void return type, so simply call it
robot.Poke();

//Note that the parameter values provided in these calls represent those values we  
//expect our mock to be called with. Similary, the return value represents the value  
//that the mock will return when this method is called.

//You may expect a method to be called multiple times:

// again, methods that return values use Expect.Call
Expect.Call(robot.SendCommand("Wake Up")).Return("Groan").Repeat.Twice();

// when no return type, any extra information about the method call
// is provided immediately after via static methods on LastCall
robot.Poke();
LastCall.On(robot).Repeat.Twice();
  1. 将模拟对象设置为 "Replay" 状态,根据调用,它将重播刚刚记录的操作。
mocks.ReplayAll();
  1. 调用使用模拟对象的代码。
theButler.GetRobotReady();
  1. 检查是否对模拟对象进行了所有调用。
mocks.VerifyAll();

分而治之!

如果测试(有些人会说那些不是单元测试,但这不是这个问题的一部分)需要启动一些服务 - 实现它!将它们部署到某个开发或暂存环境,然后您只需要配置来自 API 测试程序集的连接。

我会将解决方案一分为二,并将它们称为集成测试。如果你想让他们进行蜜蜂单元测试,你已经从上面的 post 中得到了你需要的东西。

对于不想以正确的方式进行单元测试而只想运行在同一解决方案中进行多个项目的任何人,这里就是答案。

右击后端项目 -> 调试 -> Start without debugging.
界面不会变灰,可以启动其他项目。

右键单击开始测试 -> 运行 测试
或者 运行 您的前端通过将其设置为启动项目(在解决方案资源管理器中以粗体显示)并单击 F5 或绿色箭头“开始调试”来像往常一样进行调试。