2

如果我使用 WCF 服务,则会生成以下示例客户端代码:

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="ServiceFault", Namespace="http://schemas.xxx.com/2014/07/Contracts/Faults")]
[System.SerializableAttribute()]
internal partial class ServiceFault : MyProject.Client.WCFService.Fault { ... }

此代码是internal故意生成的 - 它并不意味着可以在程序集之外访问。

例如,如果我有一个包含以下代码的单元测试(该 URL 是故意无效的,它没有被这个问题屏蔽):

MyClientWrapper.Connect("http://invalidurl.com/endpoint/service.svc")

它将抛出类型异常System.ServiceModel.FaultException<MyProject.Client.WCFService.ServiceFault>。我遇到的问题是,当我定义单元测试时:

[TestMethod]
[ExpectedException(typeof(FaultException<MyProject.Client.WCFService.ServiceFault>))]
public void ShouldFail() { ... }

令牌MyProject.Client.WCFService.ServiceFault无效,因为它被定义为internal(再次,故意)。

那么我怎么能期望我正在测试的程序集内部类型的异常呢?

4

2 回答 2

3

使用InternalsVisibleToAttribute。您可以修改您的 AssemblyInfo.cs,例如:

[assembly: InternalsVisibleTo("Tests.Project")]
于 2014-07-24T14:28:35.503 回答
0

您可以将一个添加InternalsVisibleToAttribute到源程序集:

[assembly: InternalsVisibleTo("TestAssembly")]
于 2014-07-24T14:28:27.710 回答