我怎么能期望出现对单元测试程序集不可见的类型的异常呢?
本文关键字:类型 异常 程序集 期望 怎么能 单元测试 | 更新日期: 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")]