Xunit测试失败,并显示NU1701

时间:2019-07-11 14:15:19

标签: unit-testing xamarin visual-studio-2017 nuget xunit

我尝试让我的Xamarin运行单元测试,但未能使其正常运行。我在项目中添加了以下nuget包:

  • MSTest.TestAdapter
  • MSTest.TestFramework
  • xunit

我可以在测试列表中看到我的单元测试。但是,当我开始运行单个测试时,会收到以下消息:

  

没有测试匹配给定的测试用例过滤器FullyQualifiedName = ...

经过研究后,我在 Build 部分中找到了以下消息:

  

警告NU1701:使用“ .NETFramework,Version = v4.6.1”而不是项目目标框架“ .NETCoreApp,Version = v2.0”恢复了软件包“ MSTest.TestAdapter 1.4.0”。该软件包可能与您的项目不完全兼容。

如何运行测试?

编辑:我从项目中卸载了MSTest Nuget并得到了以下内容:

  

没有测试匹配给定的测试用例过滤器

编辑2:测试如下:

using System;
using System.Collections.Generic;
using System.Text;
using App.Services;
using Xunit;

namespace App.Tests.Services
{
  public class HelperTest
  {
    [Fact]
    public void Encrypt_password_Test()
    {
      string password = "Helloworld";
      string expectedResult = "";
      string result = Helpers.Encrypt_password(password);

      Assert.Equal(expectedResult, result);
    }
  }
}

我希望测试会失败,因为字符串为空。

csproj文件:

<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <NeutralLanguage>en-GB</NeutralLanguage>
    <AssemblyName>App</AssemblyName>
    <RootNamespace>App</RootNamespace>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    <DebugType>pdbonly</DebugType>
    <DebugSymbols>true</DebugSymbols>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Newtonsoft.Json" Version="12.0.2" />
    <PackageReference Include="SharpZipLib" Version="1.1.0" />
    <PackageReference Include="sqlite-net-pcl" Version="1.5.231" />
    <PackageReference Include="System.Numerics.Vectors" Version="4.5.0" />
    <PackageReference Include="Xamarin.Essentials" Version="1.2.0" />
    <PackageReference Include="Xamarin.Forms" Version="4.1.0.581479" />
    <PackageReference Include="Xamarin.Plugin.FilePicker" Version="2.1.18" />
    <PackageReference Include="xunit" Version="2.4.1" />
  </ItemGroup>
  <ItemGroup>
    <XliffResource Include="MultilingualResources\App.de.xlf" />
  </ItemGroup>
  <ItemGroup>
    <Compile Update="Localizations\AppResources.Designer.cs">
      <DesignTime>True</DesignTime>
      <AutoGen>True</AutoGen>
      <DependentUpon>AppResources.resx</DependentUpon>
    </Compile>
    <Compile Update="Views\Login\NewProfilePage.xaml.cs">
      <DependentUpon>NewProfilePage.xaml</DependentUpon>
    </Compile>
  </ItemGroup>
  <ItemGroup>
    <EmbeddedResource Update="Localizations\AppResources.resx">
      <Generator>ResXFileCodeGenerator</Generator>
      <LastGenOutput>AppResources.Designer.cs</LastGenOutput>
    </EmbeddedResource>
    <EmbeddedResource Update="Views\Settings\AppSettings.xaml">
      <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
    </EmbeddedResource>
    <EmbeddedResource Update="Views\Login\NewProfilePage.xaml">
      <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
    </EmbeddedResource>
    <EmbeddedResource Update="Views\Settings\ProfilelistPage.xaml">
      <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
    </EmbeddedResource>
    <EmbeddedResource Update="Views\Settings\ProfilePage.xaml">
      <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
    </EmbeddedResource>
    <EmbeddedResource Update="Views\ProjectPage.xaml">
      <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
    </EmbeddedResource>
    <EmbeddedResource Update="Views\Settings\SensorListPage.xaml">
      <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
    </EmbeddedResource>
    <EmbeddedResource Update="Views\SensorTestPage.xaml">
      <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
    </EmbeddedResource>
    <EmbeddedResource Update="Views\Settings\SettingsPage.xaml">
      <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
    </EmbeddedResource>
  </ItemGroup>
  <ItemGroup>
    <Folder Include="Tests\Projectlist\" />
    <Folder Include="Tests\Settings\" />
  </ItemGroup>
</Project>

我还创建了一个示例xunit测试项目。在那里,我注意到它使用 netcoreapp2.1 作为TargetFramework。当我在应用程序中更改TargetFramework时,使其与Xamarin不兼容。

1 个答案:

答案 0 :(得分:1)

您几乎自己找到了解决方案。确实,测试未运行的原因是因为netstandard目标框架不可执行。 netstandard是一个合同,但是它需要一个运行时,例如netcoreapp 、. NET Framework(例如net472),Xamarin或其他。测试是通过静态分析而不是执行来发现的。

人们为他们的代码编写测试的通常方法是将测试放在单独的项目中。这也意味着当您将应用程序交付给客户时,他们安装的dll没有永远不会运行的测试代码,只会无缘无故地增大下载量。

因此,创建一个xunit测试项目。理想情况下,它的目标是您的应用程序将要运行的运行时,但是我从未做过任何Xamarin开发,所以我不知道这是否可行,因此,netcoreapp2.1netcoreapp2.2足够好。如果您使用的是Visual Studio,则add a project reference,否则,请编辑csproj并添加<ProjectReference Include="../path/to/project.csproj" />

如果您的生产代码具有不想公开的内部类,则将InternalsVisibleTo attribute添加到您的生产程序集中,它将仅对您的测试程序集可用。