MSTest 代码覆盖率在 UWP 应用程序中返回空

问题描述

我的 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

我已按照上述链接中的所有不同故障排除事项进行操作。但他们似乎没有解决它。我不知道是什么导致了这种情况,但这里有一些与我的环境相关的信息。

我的测试项目的参考:

enter image description here

我引用的 *.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));
        }
    }

测试结果: 此处显示的所有测试均返回成功。

构建配置:

Build Configuration

MSTest 项目的 NuGet 包:

NuGet Packages

如果需要更多信息,请发表评论

解决方法

UWP MSTest 实现目前不支持代码覆盖率。 Here 是一个指向讨论它的博客的链接。解决方法可能是将 UWP Class Libary 更改为 .NET Standard Class Libary。然后将 UWP MSTest project 更改为 .NET Core 变体。更改此设置并通过测试资源管理器运行代码覆盖率后,您将获得所需的结果。 enter image description here

有关此问题的更好解释,您可以访问有关此问题的网站。 https://www.redgreencode.com/unit-testing-uwp-apps/