使用TFS2015生成并测试ASP.Net Core项目

在TFS上配置ASP.Net Core所需的DNX环境

这里通过PowerShell实现,在解决方案中增加一个PowerShell脚本,这里名为 Prebuild.ps1

# bootstrap DNVM into this session.
&{$Branch='dev';iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.ps1'))}

# load up the global.json so we can find the DNX version
$globalJson = Get-Content -Path $PSScriptRoot\global.json -Raw -ErrorAction Ignore | ConvertFrom-Json -ErrorAction Ignore

if($globalJson)
{
    $dnxVersion = $globalJson.sdk.version
}
else
{
    Write-Warning "Unable to locate global.json to determine using 'latest'"
    $dnxVersion = "latest"
}

# install DNX
# only installs the default (x86, clr) runtime of the framework.
# If you need additional architectures or runtimes you should add additional calls
# ex: & $env:USERPROFILE\.dnx\bin\dnvm install $dnxVersion -r coreclr
& $env:USERPROFILE\.dnx\bin\dnvm install $dnxVersion -Persistent

 # run DNU restore on all project.json files in the src folder including 2>1 to redirect stderr to stdout for badly behaved tools
Get-ChildItem -Path $PSScriptRoot\分销系统 -Filter project.json -Recurse | ForEach-Object { & dnu restore $_.FullName 2>1 }
Get-ChildItem -Path $PSScriptRoot\MVC6.UnitTest -Filter project.json -Recurse | ForEach-Object { & dnu restore $_.FullName 2>1 }

其中 分销系统 和 MVC6.UnitTest 为我测试的项目,即project.json所在的位置,请自行修改为自己对应的项目

然后登录TFS修改生成定义,添加一个PowerShell的生成步骤,把脚本文件指向 Prebuild.ps1

如果你在TFS上找不到这个文件,请先把这个文件签入TFS

添加XUnit项目

如果你的VS中有XUnit的模板,直接添加就可以了。如果没有,可以先创建一个ASP.Net Core Class Library的项目,然后参照下面的 project.json 内容,来添加xunit package的引用

{
	"version": "1.0.0-*",
	"description": "MVC6.UnitTest Class Library",
	"authors": [ "lishewen" ],
	"tags": [ "" ],
	"projectUrl": "",
	"licenseUrl": "",
	"frameworks": {
		"dnx451": {
			"dependencies": {
				"xunit.runner.visualstudio": "2.1.0"
			}
		},
		"dnxcore50": {
			"dependencies": {
				"Microsoft.CSharp": "4.0.1-beta-23516",
				"System.Collections": "4.0.11-beta-23516",
				"System.Linq": "4.0.1-beta-23516",
				"System.Runtime": "4.0.21-beta-23516",
				"System.Threading": "4.0.11-beta-23516"
			}
		}
	},
	"dependencies": {
		"xunit": "2.1.0-*",
		"xunit.runner.dnx": "2.1.0-*"
	},
	"commands": {
		"test": "xunit.runner.dnx"
	}
}

在单元测试中添加一个简单的测试方法

		[Fact]
		public void PassingTestDnx()
		{
			Assert.Equal(1, 1);
		}

写一个运行xunit单元测试的PowerShell脚本,RunDnxTest.ps1

Set-ExecutionPolicy unrestricted -Scope CurrentUser -Force
dnx -p $PSScriptRoot\MVC6.UnitTest test -xml $PSScriptRoot\MVC6.UnitTest\testresults.xml

最后参照 Prebuild.ps1的步骤,在生成定义中,再加一项PowerShell的生成步骤,并指向脚本 RunDnxTest.ps1

此步骤完成后,我们还需要添加一项 发布测试结果 的步骤,已便将XUint的结果与原来Visual Studio 的单元测试结果合并

具体参照下图配置:

至此,ASP.Net Core的自动生成和测试的配置就完成了,我们可以运行下生成定义来看看测试结果