簡體   English   中英

如何在 ASP.NET Core 中的模型中 xunit/Moq 測試內部設置器

[英]How to xunit / Moq test an internal setter within a model in ASP.NET Core

public class Details
{
    public int Id { get; internal set; }
    public string Name { get; set; }
}

我有一個任務,其中模型中的 setter 具有內部屬性,並且我嘗試添加諸如

[assembly: InternalsVisibleTo("sometestrepo")] 

在模型類,但無濟於事。 我用谷歌搜索了幾個小時,似乎找不到答案。 甚至可以對它進行 xunit 測試或模擬和對象,以便它允許創建具有 Id 的對象。 否則我應該如何完全測試所有基於 ID 參數的 CRUD 方法?

解決方案是將要測試的private成員設置為internal 然后你可以添加InternalsVisibleTo屬性。

[assembly: InternalsVisibleTo("sometestrepo")]

如果你使用的是 Moq,你可以使用類似的東西:-

var mockAddress = new Mock<Details>();
mockAddress.SetupGet(p => p.Id).Returns(42);
mockAddress.SetupGet(p => p.Name).Returns("Whatever you want to match");

var mockAddressRepository = new Mock<IRepository<Details>>();
var addresses = new List<Details> { mockAddress.Object };
mockAddressRepository.Setup(p => p.GetEnumerator()).Returns(addresses.GetEnumerator());

var addressToMatch = mockAddressRepository.Object.FirstOrDefault(address => address.Id == 42);
Console.WriteLine(addressToMatch.Name);

預期輸出是:-

Whatever you want to match

一種可能有效的解決方案是使用假貨。

在您的 Test 類中創建一個假的Details類,繼承自Details 然后你可以新建一個屬性。

public class FakeDetails : Details
{
    public new int Id { get; set; }
}

您可以在測試中使用 fake 來設置屬性。

var fakeDetails = new FakeDetails();
    
fakeDetails.Id = 15;
fakeDetails.Name = "Some Name";

暫無
暫無

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

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