簡體   English   中英

測試通過,但代碼覆蓋率為0%

[英]Tests passed but code coverage is 0%

我仍在學習在應用程序中使用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();
    }
}

您不是在測試應用程序代碼,而是在測試模擬程序。 您可以通過在Application.GetDataFromDataBase()設置斷點並調試測試來看到此情況。 您會看到它不會被擊中。

您只需要模擬依賴項(如果有)。 因此,重寫測試以實際調用代碼:

[TestMethod]
public async Task GetDataFromDataBase_Returns_True()
{
    // Arrange
    IApplication classUnderTest = new Application();

    // Act
    var result = await classUnderTest.GetDataFromDataBase();

    // Assert
    Assert.IsTrue(result);
}

您會發現所有模擬和助手的需求都消失了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM