2017-01-30 48 views
0

最近我回答了SO question描述如何避免內部對象狀態驗證FluentAssertions。現在我面臨同樣的問題,並想知道爲什麼確實FluentAssertions驗證內部屬性OOTB?爲什麼FluentAssertions應該等效驗證內部?

public class Class1 
{ 
    [Fact] 
    public void CompareCultureInternalFields() 
    { 
     var foo1 = new Foo(); 
     var foo2 = new Foo(); 

     foo1.ShouldBeEquivalentTo(foo2); // fails 
    } 

    public object Culture { get; set; } 
} 

public class Foo 
{ 
    public Foo() 
    { 
     InternalProp = Guid.NewGuid(); 
    } 

    internal Guid InternalProp { get; } 
} 

異常詳細信息:

Xunit.Sdk.XunitException: Expected member InternalProp to be {61625b04-c4e6-4e08-a45a-5ff8bb7d53e7}, but found {df589d73-e382-4104-8157-a41da2ca17f5}. 

With configuration: 
- Use declared types and members 
- Compare enums by value 
- Match member by name (or throw) 
- Be strict about the order of items in byte arrays 

不應該foo1foo2對象是相當於爲消費者誰與公共API交易?

+0

在您的示例中,如果該類位於另一個程序集/項目中,則不應該能夠訪問內部屬性。這不是一個很好的例子,如果類在相同的程序集 – Nkosi

+0

好點。如果我用一些自動生成的內部字段重寫樣本會怎麼樣? –

+0

好了,我明白你的意思了。 – Nkosi

回答

0

我試圖追溯到回購的起源,但顯然它一直是這樣的。在某種意義上,internal屬性在概念上是public。如果你真的想把它們設計成不屬於你的公共API,那麼讓它們專用私人。你爲什麼會碰到這個問題的另一個原因是你測試範圍可能有點小。爲什麼你會公開某些屬性和其他屬性?再說一次,這只是我的推測,你可能有充足的理由這樣做。儘管你總是可以排除internal屬性。

相關問題