gpt4 book ai didi

c# - 单元测试静态实用程序类

转载 作者:太空宇宙 更新时间:2023-11-03 23:21:11 25 4
gpt4 key购买 nike

如何在静态类中对静态方法进行单元测试?

有这段代码:

public class AddressConverter {
public static BillingAddress ConvertAddress(ShippingAddress address)
{
var billingAddress = new BillingAddress (); // this is the problem - 3rd party lib
...
}

我正在使用第 3 方库,我唯一可以修改的是 AddressConverter 类。顺便说一下,BillingAddress() 是一个第三方库, 反编译时显示:

// decompiled code
public class BillingAddress : IOrderAddress
{
public BillingAddress() : base(SomeSessionContext.Current.Class)
{
...

问题是我无法创建 new BillingAddress(),因为它的值取自某些 session 变量等。

我该如何测试呢?有什么解决方法吗?

最佳答案

如果您无法通过重构将 BillingAddress 注入(inject)到静态方法中,您可以使用 Microsoft Fakes 对此进行测试。

基本上你会为你的第 3 方 DLL 添加一个 Fakes 库:

In Solution Explorer, open your unit test project’s references and select the reference to the assembly that contains the method you want to fake. ... Choose Add Fakes Assembly.

enter image description here

那么您应该可以使用 ShimBillingAddress。 (空气代码警告,我无权访问您的第 3 方库 :-))

using (ShimsContext.Create())
{
// Arrange:
YourThirdPartyLib.Fakes.ShimBillingAddress.SomeMethod = () => { return "some meaningful value"; };

// Instantiate the component under test:
var sut = new AddressConverter();

// Act:
var result = sut.ConvertAddress(someShippingAddress);

// Assert:
}

引用自 MSDN - Isolating Code Under Test with Microsoft Fakes // Getting started with shims 的说明和 MSDN - Using shims to isolate your application from other assemblies for unit testing .

MSDN 上有关于 naming conventions 的信息对于假货生成的垫片,因为它并不总是很明显。

另外,this answer的后半部分有一个关于为系统 dll 设置伪造的演练。

关于c# - 单元测试静态实用程序类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35372670/

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