测试通过但代码覆盖率为0%

时间:2018-06-14 07:21:10

标签: c# unit-testing moq code-coverage mstest

我仍在学习使用MSTest和Moq在我的应用程序中进行自动单元测试。我已经成功地模拟了代码并运行它。它显示测试已通过,但代码覆盖率为0%。这是我的代码。需要更改以便代码覆盖率达到100%。

我知道这个问题之前曾被问过几次,但似乎没有什么可以帮助我。所以任何人都可以告诉我我做错了什么。

非常感谢任何帮助。谢谢。

PS:我正在使用Sonarcube来了解代码覆盖率。

using Moq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Threading.Tasks;
using System.Diagnostics.CodeAnalysis;

namespace MyNameSpace
{
    [TestClass]
    public class ApplicationTest
    {
        readonly Helper moqHelper = new Helper();
        [TestMethod()]
        public void GetDataFromDataBaseMoq()
        {
            Task<bool> returnValue;
            Mock<Application> mockType = new Mock<Application>();
            mockType.CallBase = true;
            mockType.Setup(x => x.GetDataFromDataBase()).Returns(returnValue = moqHelper.GetDataFromDataBaseMoq());
            if (returnValue.Result)
            {
                Assert.IsTrue(true);
            }
            else
            {
                Assert.Fail();
            }
        }
    }

    [ExcludeFromCodeCoverage]
    class Helper
    {
        internal async Task<bool> GetDataFromDataBaseMoq()
        {
            bool returnValue = true;
            return returnValue;
        }
    }
    public class Application : IApplication
    {
        public virtual async Task<bool> GetDataFromDataBase()
        {
            //if data retrive successfull, return true, else false
            return true;
        }
    }
    public interface IApplication
    {
        Task<bool> GetDataFromDataBase();
    }
}

1 个答案:

答案 0 :(得分:4)

您没有测试您的应用程序代码,您正在测试您的模拟。您可以通过在uid中设置断点并调试测试来看到这一点;你发现它不会被击中。

您只需要模拟依赖项(如果有)。因此,重写您的测试以实际调用您的代码:

Application.GetDataFromDataBase()

而且你会发现所有模拟和助手都需要消失。