簡體   English   中英

網絡核心:用於IEquatable的代碼生成/等於用於比較兩個類模型的代碼

[英]Net Core: Code Generation for IEquatable/Equals for Comparing Two Class Models

我們從實體框架中搭建數據庫以創建類模型。 我們有超過1000個課程。 現在,我們正在實施單元測試,以比較插入了實際類和期望類的類。 以下網站推薦以下方法比較所有會員。

我必須為我所有的1000多個班級寫這篇文章嗎? 還是有一種方法可以在Visual Studio中使用自動代碼生成來創建所有這些IEquatable? 也許與T4?

https://grantwinney.com/how-to-compare-two-objects-testing-for-equality-in-c/

public class Person : IEquatable<Person> 
{
    public string Name { get; set; }
    public int Age { get; set; }

    public bool Equals(Person other)
    {
        if (ReferenceEquals(other, null))
            return false;

        if (ReferenceEquals(this, other))
            return true;

        return Name.Equals(other.Name) && Age.Equals(other.Age);
    }

https://docs.microsoft.com/zh-cn/visualstudio/modeling/code-generation-and-t4-text-templates?view=vs-2019

下面的團隊合作伙伴回答很好,需要為1000多個類實現這種方法的方法。

如果您僅針對測試斷言實現Equals,則可以使用FluentAssertions之類的庫來進行斷言。 各種BeEquivalentTo方法比較對象圖並給出詳細的錯誤消息(例如,預期Age為x但為y),通常比實現自己的Equals方法所得到的結果更好。 它與現成的所有主要測試框架(mstest,nunit,xunit.net)集成。

是的,它可能在Visual Studio> = 2017中或使用ReSharper:

https://stackoverflow.com/a/48441971

https://docs.microsoft.com/zh-cn/visualstudio/ide/reference/generate-equals-gethashcode-methods?view=vs-2017

這對於1000多個類仍然很耗時。 您可能會研究Visual Studio的用於插件開發的API,以查看是否可以通過編程方式觸發整個文件列表的此選項。

暫無
暫無

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

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