我有一个基类来生成重复的测试方法。
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/