[英]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.