2017-07-07 64 views
0

我遇到了MS Fakes沒有向fakes程序集添加幾個代理屬性的問題儘管它們出現在元數據中。MS Fakes錯誤CS0117:存根[ClassName]不包含[代表屬性名稱]的定義,即使元數據表示它存在

我有一個類A,它繼承自抽象泛型類B<T>並實現了一個接口IA。除了T之外的所有內容都在相同的名稱空間中定義,並且全部位於同一個程序集中。

B有一個方法(BMethod)和IA定義在A實施的方法(IAMethod)。

在我的測試項目中,我爲包含這些類/接口的項目添加了一個僞造程序集。我已經指定假貨大會應該只爲類A添加一個存根StubA,這在默認情況下也會將接口IA存根爲StubIA

當創建的StubA一個實例我可以分配的功能定義到所有從B類創建的代表,但我不能引用委託屬性名稱爲A定義,並從IA合同所需的功能。 (例如,我可以參考和分配StubA.BMethodArgType,但不StubA.IAMethodArgType

當我瀏覽到VS2015中的StubA定義我可以看到VS告訴我缺少的性質實際上是那裏的元數據。

... 
public class StubA : A, IStub<A>, IStub, IStubObservable, IPartialStub 
{ 
... 
    // 
    // Summary: 
    //  Sets the stub of B`1.BMethod(ArgType arg) 
    public FakesDelegates.Func<ArgType, ReturnType> BMethodArgType; 
    // 
    // Summary: 
    //  Sets the stub of A.IAMethod(ArgType arg) 
    public FakesDelegates.Func<ArgType, ReturnType> IAMethodArgType; 
... 
} 
... 

但是當我打開FakesAssemblies/ProjectName.Fakes.xml我沒有看到爲StubA定義IAMethodArgType一員,但我確實看到StubIA定義IAMethodArgType成員,存根接口。此外,如果我將Interfaces="false"屬性添加到ProjectName.fakes中的Add標記,ProjectName.Fakes.xml文件將不再包含IAMethodArgType的成員。

儘管如此,我被給錯誤CS0117,不能建立我的測試項目。我已經嘗試清除我的FakesAssembly文件夾並重建。我已經嘗試刪除所有的假貨組裝參考,並將它們添加回去。我嘗試使IAMethod實現virtual。似乎沒有任何幫助。

任何人都可以告訴我可能會發生什麼,或者我可以在哪裏查看可能發生的原因?

回答

0

好了,所以我的情況下,任何人在這裏張貼這是有這個頭疼,但似乎問題是,在A的實現爲IA方法確實需要virtual的存根使用它們。當我最初將它們製作成virtual時,我所看到的是元數據與實際構建之間的延遲,因此它看起來好像仍然不在元數據中,即使它們實際上已經被構建過程拾取並且不再產生錯誤CS0117

相關問題