如何在不构建解决方案两次的情况下 运行 单元测试和部署我的代码?

How can I run unit tests and deploy my code without building the solution twice?

我正在为一个使用 NUnit 进行单元测试的 ASP.NET 站点设置 TeamCity 部署。如何以只需要构建一次但允许我在部署代码之前 运行 我的测试的方式设置我的构建?

我的构建配置目前是这样设置的:

1) MSBuild - Build with no deploy.

2) NUnit - Run unit tests.

3) MSBuild - Build again, adding /p:PublishProfile and /p:DeployOnBuild parameters to deploy after building via WebDeploy.

理想情况下,我只想构建一次以缩短构建时间,但我不想 运行 在代码已经部署后进行单元测试。

我可以在 msbuild 步骤的中间调用 NUnit 吗?这样我就可以将我的 3 个步骤合并为 1 个步骤。

或者,我可以在 TeamCity 中使用 msdeploy 命令吗?这可以取代我的第三步,只要我仍然可以将其连接到我的 WebDeploy 端点。

这很简单:只需将您自己的 msbuild 文件写入 运行 三个目标,每个目标都取决于前一个目标:

Target Build - 构建项目(即解决方案文件) Target RunUnitTests -(取决于 Target Build)。这 运行 是单元测试。 Target Deploy -(取决于 Target RunUnitTests)。这会将您的应用程序部署到任何地方。

看起来像这样:

<Target Name="Build">
   <!-- Do Build Stuff here -->
</Target>

<Target Name="Tests" DependsOnTargets="Build">
   <!-- Run NUnit tests here -->
</Target>

<Target Name="Deploy" DependsOnTargets="Tests">
   <!-- Deploy your stuff here -->
</Target>

然后在 TeamCity 中,添加一个 msbuild 步骤并让它指向上面的文件。然后调用 'Deploy' 目标。