gpt4 book ai didi

c# - 将构造函数参数传递给 Nunit 基类

转载 作者:行者123 更新时间:2023-11-30 16:55:44 27 4
gpt4 key购买 nike

我有一个基类来生成重复的测试方法。

public interface IService1 { }
public interface IService2: IService1 { }

[TestFixture]
public abstract class MyBase
{
private readonly IService1 service;

protected MyBase(IService1 service)
{
this.service = service;
}

[Test]
public void test1()
{
//service.callmethod
}
}

我已经将这个基类实现到另一个测试类,如下所示:

[TestFixture]
public class MyTest:MyBase
{
private IService2 service;

[SetUp]
public void setup()
{
service = A.Fake<IService2>();
}

public MyTest(IService2 service) : base(service)
{
}
}

这给出了错误:没有找到合适的构造函数

最佳答案

MyBase 上的[TestFixture] 属性不应该存在。作为一个抽象类,它不能被创建,所以它不是真正的夹具。

NUnit 只知道如何为您的类调用默认构造函数,因此您的测试装置应该具有默认构造函数。对于您的示例代码,您期望传递到 MyTest 构造函数的 service 来自哪里?

可用于实现类似事情的替代方法是将对象的创建委托(delegate)给抽象父类的子类。所以你最终得到这样的东西:

public abstract class MyBase
{
[Test]
public void test1()
{
GetService().callmethod();
}

public abstract IService1 GetService();
}


[TestFixture]
public class MyTest:MyBase
{
private IService2 service;


[SetUp]
public void setup()
{
service = A.Fake<IService2>();
}

public override IService1 GetService()
{
return service;
}
}

于是子类实现抽象方法GetService让父类获取它需要的服务对象引用。

关于c# - 将构造函数参数传递给 Nunit 基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29076912/

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