我怎么能期望出现对单元测试程序集不可见的类型的异常呢?

本文关键字:类型 异常 程序集 期望 怎么能 单元测试 | 更新日期: 2023-09-27 18:14:41

如果我使用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(同样是故意的)。

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

我怎么能期望出现对单元测试程序集不可见的类型的异常呢?

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

[assembly: InternalsVisibleTo("Tests.Project")]

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

[assembly: InternalsVisibleTo("TestAssembly")]
相关文章: