gpt4 book ai didi

unit-testing - NSubstitute:无法模拟与没有相应 setter 的成员变量关联的语法糖 getter 方法

转载 作者:行者123 更新时间:2023-12-03 10:07:13 35 4
gpt4 key购买 nike

对于我的 .NET C# 应用程序,我正在使用名为 efaxdeveloper.com 的第三方电子传真软件

我需要模拟 efaxdeveloper.com 的软件 OutboundResponse 对象。

请记住,由于它是第 3 方,我显然不能修改第 3 方 dll。

在 eFaxDeveloper.dll 中,OutboundResponse 类的代码如下:

using System.Runtime.InteropServices;

namespace J2.eFaxDeveloper.Outbound
{
//
// Summary:
// oubound response
[ClassInterface(ClassInterfaceType.AutoDual)]
[System.Runtime.Serialization.DataContractAttribute(Namespace = "")]
public class OutboundResponse
{
public OutboundResponse();

//
// Summary:
// Unique client specified transmission identifier
public string TransmissionID { get; }
//
// Summary:
// eFax Developer™ transmission identifier
public string DOCID { get; }
//
// Summary:
// J2.eFaxDeveloper.Outbound.StatusCode
public StatusCode StatusCode { get; }
//
// Summary:
// Status description
public string StatusDescription { get; }
//
// Summary:
// J2.eFaxDeveloper.Outbound.ErrorLevel
public ErrorLevel ErrorLevel { get; }
//
// Summary:
// Error message
public string ErrorMessage { get; }
}
}

由于它只有 setter/getter ,我尝试了以下代码片段:
    OutboundResponse outboundResponseInQuestion = Substitute.For<OutboundResponse>();

outboundResponseInQuestion.TransmissionID.Returns("someTransmissionID");

不幸的是, outboundResponseInQuestion.TransmissionID 抛出

“outboundResponseInQuestion.TransmissionID”引发了“System.NullReferenceException”类型的异常

我无法为 OutboundResponse 类创建接口(interface),所以有人可以告诉我如何使用 NSubstitute 模拟所述对象并使其返回正确的值吗?

最佳答案

NSubstitute 无法模拟此类型,因为它没有 virtual成员。 (出于同样的原因,我们也不能手动创建 OutboundResponse 的子类型,它会覆盖 getter 并公开 setter 并将其用于测试。)

通过创建一个封装了来自 3rd 方库 (facade pattern) 的全部所需行为的接口(interface)并测试您的代码与该接口(interface)的交互,您可能会更轻松。然后,您可以在调用 3rd 方库时单独测试该接口(interface)的实现是否会产生正确的结果。这些可能是集成或手动测试。
<shamelessplug>我之前写过一些关于 downsides of mocking types we don't own 的文章。你可能会觉得有用。 </shamelessplug>

关于unit-testing - NSubstitute:无法模拟与没有相应 setter 的成员变量关联的语法糖 getter 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55054764/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com