我有一个基类来生成重复的测试方法。
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)
{
}
}
这会出错:找不到合适的构造函数。
答案 0 :(得分:2)
[TestFixture]
上的MyBase
属性不应该存在。作为一个抽象类,它不能被创建,所以它不是真正的固定。
NUnit只知道如何调用类的默认构造函数,因此测试装置应该有默认的构造函数。使用示例代码,您期望传递到service
构造函数的MyTest
来自何处?
可用于实现类似事物的替代方法是将对象的创建委托给抽象父级的子类。所以你最终得到这样的东西:
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
,以允许父类获取它需要的服务对象引用。
答案 1 :(得分:0)
我知道这是一篇较旧的帖子,但要专门回答你的问题:
TestBase.cs
[TestFixture]
public class TestBase
{
public string Browser { get; set; }
public IWebDriver Driver { get; set; }
public TestBase( string _browser){ this.Browser = _browswer }
[SetUp]
public Setup(){
Driver = SeleniumExtension.GetDriver(Browser);
}
}
MyTests.cs
[TestFixture("Chrome", "IE", "Firefox")]
class MyTests : TestBase
{
public MyTests(string _browser) : base(_browser) { }
[Test]
public void Test_001(){
Driver.Goto("https://www.google.com");
}
}
重建。
在您的测试资源管理器中,您现在将看到Test_001的testfixture变体,包括所有三种类型的测试,Chrome,IE和Firefox。
您还可以访问测试中可能需要的任何类或变量,如同正常继承一样
经常清理测试。
HTH某人!