我遇到了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
。似乎沒有任何幫助。
任何人都可以告訴我可能會發生什麼,或者我可以在哪裏查看可能發生的原因?