![](/img/trans.png)
[英]Sonarqube showing code coverage as 0%, but shows the no of tests passed
[英]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.