如何 运行 针对 dotnet 核心控制台应用程序进行验收测试?
How to run acceptance test against dotnet core console app?
我正在尝试 运行 针对 dotnet 核心控制台应用程序进行一些验收测试。我的测试不断失败,因为控制台应用程序未正确启动。正确启动我的意思是 System.Diagnostics.Process 我生成到 运行 控制台应用程序没有按照我的意愿进行。
以下是我设置场景的方式:
通过 运行ning 创建控制台应用程序:
dotnet new console -o myconsoleapp
然后修改Program.Main
为return一个-1
退出代码通过Environment.Exit(-1)
通过运行ning创建测试项目:
dotnet new xunit -o myconsoleapp.tests
在测试项目中添加 myconsoleapp 作为参考:
dotnet add ./myconsoleapp.tests reference ./myconsoleapp
编写验收测试:
[Fact]
public void AppExistsWithProperExitCode(){
var @params = "myconsoleapp.dll";
using(var sut = Process.Start("dotnet", @params))
{
sut.WaitForExit();
var actual = sut.ExitCode;
Assert.Equal(-1,actual);
}
}
设置场景后我运行测试:
dotnet test ./myconsoleapp.tests
运行 测试总是失败。为了诊断问题,我 运行:
dotnet build ./myconsoleapp.tests
dotnet ./myconsoleapp.tests/bin/Debug/netcoreapp2.2/myconsoleapp.dll
运行 这两个命令 return 出现以下错误信息:
A fatal error was encountered. The library 'hostpolicy.dll' required to execute the application was not found in 'myconsoleapp.tests/bin/Debug/netcoreapp2.2/'.
Failed to run as a self-contained app. If this should be a framework-dependent app, add the myconsoleapp.tests/bin/Debug\netcoreapp2.2/myconsoleapp.runtimeconfig.json file specifying the appropriate framework.
错误消息很好地解释了所需内容,但我对 dotnet 核心的了解还不足以完成我的任务。
您可以使用 dotnet publish -c Release -r win10-x64
创建一个自包含的可执行文件(对于 Windows exe),然后将您的测试代码更改为
using(var sut = Process.Start(@"<path-to-the-executable>"))
{
sut.WaitForExit();
var actual = sut.ExitCode;
Assert.Equal(-1,actual);
}
这适用于我的 Windows 10 台带有 dotnet core 3 预览版的电脑。
我确定没有一个答案。上下文是这里的关键。我最终做了类似于@Fabio 建议的事情,但@Marius 也有一个合理的答案。仅取决于您要测试的内容。
我想相应地测试可执行文件 运行。我相信我通过说这是验收测试来表达原始问题是错误的,但它似乎更类似于功能测试。在测试中生成 运行-able 可执行文件的努力超出了我的预期。我改为测试 Program.Main
。
我正在尝试 运行 针对 dotnet 核心控制台应用程序进行一些验收测试。我的测试不断失败,因为控制台应用程序未正确启动。正确启动我的意思是 System.Diagnostics.Process 我生成到 运行 控制台应用程序没有按照我的意愿进行。
以下是我设置场景的方式:
通过 运行ning 创建控制台应用程序:
dotnet new console -o myconsoleapp
然后修改Program.Main
为return一个-1
退出代码通过Environment.Exit(-1)
通过运行ning创建测试项目:
dotnet new xunit -o myconsoleapp.tests
在测试项目中添加 myconsoleapp 作为参考:
dotnet add ./myconsoleapp.tests reference ./myconsoleapp
编写验收测试:
[Fact]
public void AppExistsWithProperExitCode(){
var @params = "myconsoleapp.dll";
using(var sut = Process.Start("dotnet", @params))
{
sut.WaitForExit();
var actual = sut.ExitCode;
Assert.Equal(-1,actual);
}
}
设置场景后我运行测试:
dotnet test ./myconsoleapp.tests
运行 测试总是失败。为了诊断问题,我 运行:
dotnet build ./myconsoleapp.tests
dotnet ./myconsoleapp.tests/bin/Debug/netcoreapp2.2/myconsoleapp.dll
运行 这两个命令 return 出现以下错误信息:
A fatal error was encountered. The library 'hostpolicy.dll' required to execute the application was not found in 'myconsoleapp.tests/bin/Debug/netcoreapp2.2/'.
Failed to run as a self-contained app. If this should be a framework-dependent app, add the myconsoleapp.tests/bin/Debug\netcoreapp2.2/myconsoleapp.runtimeconfig.json file specifying the appropriate framework.
错误消息很好地解释了所需内容,但我对 dotnet 核心的了解还不足以完成我的任务。
您可以使用 dotnet publish -c Release -r win10-x64
创建一个自包含的可执行文件(对于 Windows exe),然后将您的测试代码更改为
using(var sut = Process.Start(@"<path-to-the-executable>"))
{
sut.WaitForExit();
var actual = sut.ExitCode;
Assert.Equal(-1,actual);
}
这适用于我的 Windows 10 台带有 dotnet core 3 预览版的电脑。
我确定没有一个答案。上下文是这里的关键。我最终做了类似于@Fabio 建议的事情,但@Marius 也有一个合理的答案。仅取决于您要测试的内容。
我想相应地测试可执行文件 运行。我相信我通过说这是验收测试来表达原始问题是错误的,但它似乎更类似于功能测试。在测试中生成 运行-able 可执行文件的努力超出了我的预期。我改为测试 Program.Main
。