问题描述
我的 UWP 应用程序中 MSTest 的代码覆盖率有问题。
每次我尝试运行覆盖时,我都会得到以下结果:
Empty results generated: No binaries were instrumented. Make sure the tests ran,required binaries were loaded,had matching symbol files,and were not excluded through custom settings. For more @R_184_4045@ion see https://go.microsoft.com/fwlink/?LinkID=253731
我已按照上述链接中的所有不同故障排除事项进行操作。但他们似乎没有解决它。我不知道是什么导致了这种情况,但这里有一些与我的环境相关的信息。
我的测试项目的参考:
我引用的 *.pdb 文件存在于我的测试项目的构建目录中。
[TestClass]
public class UnitModelTests
{
[DataTestMethod]
#region Metric
[DaTarow(LengthMetric.MM,"1mm",UnitType.Metric)]
[DaTarow(LengthMetric.CM - LengthMetric.MM,"9mm",UnitType.Metric)]
[DaTarow(LengthMetric.CM,"1cm",UnitType.Metric)]
[DaTarow(LengthMetric.DM - LengthMetric.CM,"9cm",UnitType.Metric)]
[DaTarow(LengthMetric.DM,"1dm",UnitType.Metric)]
[DaTarow(LengthMetric.M - LengthMetric.DM,"9dm",UnitType.Metric)]
[DaTarow(LengthMetric.M,"1m",UnitType.Metric)]
[DaTarow(LengthMetric.KM - LengthMetric.M,"999m",UnitType.Metric)]
[DaTarow(LengthMetric.KM,"1km",UnitType.Metric)]
[DaTarow(LengthMetric.KM * 100,"100km",UnitType.Metric)]
#endregion
#region Imperial
[DaTarow(LengthImperial.Inch,"1 inch",UnitType.Imperial)]
[DaTarow(LengthImperial.Feet,"1 feet",UnitType.Imperial)]
[DaTarow(LengthImperial.Yard,"1 yard",UnitType.Imperial)]
[DaTarow(LengthImperial.Chain,"1 chain",UnitType.Imperial)]
[DaTarow(LengthImperial.Furlong,"1 furlong",UnitType.Imperial)]
[DaTarow(LengthImperial.Mile,"1 mile",UnitType.Imperial)]
[DaTarow(LengthImperial.League,"1 league",UnitType.Imperial)]
#endregion
public void LengthToStringTest(double startLength,string expected,UnitType unitType)
{
var length = new Length(startLength);
Assert.AreEqual(expected,length.UnitToString(unitType));
}
[DataTestMethod]
#region Metric
[DaTarow(VolumeMetric.MM,"1mm^3",UnitType.Metric)]
[DaTarow(VolumeMetric.MM * 9,"9mm^3",UnitType.Metric)]
[DaTarow(VolumeMetric.CM,"1cm^3",UnitType.Metric)]
[DaTarow(VolumeMetric.CM * 9,"9cm^3",UnitType.Metric)]
[DaTarow(VolumeMetric.DM,"1dm^3",UnitType.Metric)]
[DaTarow(VolumeMetric.DM * 9,"9dm^3",UnitType.Metric)]
[DaTarow(VolumeMetric.M,"1m^3",UnitType.Metric)]
[DaTarow(VolumeMetric.M * 999,"999m^3",UnitType.Metric)]
[DaTarow(VolumeMetric.KM,"1km^3",UnitType.Metric)]
[DaTarow(VolumeMetric.KM * 100,"100km^3",UnitType.Metric)]
#endregion
#region Imperial
[DaTarow(VolumeImperial.FluidOunce,"1 Fluid ounce",UnitType.Imperial)]
[DaTarow(VolumeImperial.Gill,"1 Gill",UnitType.Imperial)]
[DaTarow(VolumeImperial.Pint,"1 Pint",UnitType.Imperial)]
[DaTarow(VolumeImperial.Quart,"1 Quart",UnitType.Imperial)]
[DaTarow(VolumeImperial.gallon,"1 gallon",UnitType.Imperial)]
#endregion
public void VolumetoStringTest(double startVolume,UnitType unitType)
{
var volume = new Volume(startVolume);
Assert.AreEqual(expected,volume.UnitToString(unitType));
}
}
测试结果: 此处显示的所有测试均返回成功。
构建配置:
如果需要更多信息,请发表评论。
解决方法
UWP MSTest 实现目前不支持代码覆盖率。 Here 是一个指向讨论它的博客的链接。解决方法可能是将 UWP Class Libary
更改为 .NET Standard Class Libary
。然后将 UWP MSTest project
更改为 .NET Core
变体。更改此设置并通过测试资源管理器运行代码覆盖率后,您将获得所需的结果。
有关此问题的更好解释,您可以访问有关此问题的网站。 https://www.redgreencode.com/unit-testing-uwp-apps/