2013-02-22 12 views
8

Có cách nào để thêm đối số vào một phương thức thiết lập nunit như sau: public void SetUp(Point p = null) { /*code*/ }.Có cách nào để Tạo nunit Setup với các đối số

Tôi đã thử nó và có những ngoại lệ sau đây SetUp : System.Reflection.TargetParameterCountException : Parameter count mismatch

+1

As far như tôi biết, bạn không thể sử dụng các đối số trong phương thức '[Setup]' của bạn. Tuy nhiên, có lẽ bạn có thể hưởng lợi từ * NUnit * [thuộc tính hành động] (http://nunit.com/index.php?p=actionAttributes&r=2.6.2)? –

+0

Á hậu thử nghiệm NUnit không chuyển đối số sang phương thức 'SetUp'. Bạn cần cái gì? –

Trả lời

1

Tôi nghĩ rằng quan điểm của bạn là để tránh trùng lặp mã. Cố gắng trích xuất lớp cơ sở bằng phương pháp ghi đè được sử dụng trong SetUp(). Tất cả các lớp được thừa kế sẽ thực hiện kiểm tra từ lớp cơ sở, với các đối tượng chuẩn bị OnSetUp overriten()

[TestFixture] 
public class BaseTestsClass 
{ 
    //some public/protected fields to be set in SetUp and OnSetUp 

    [SetUp] 
    public void SetUp() 
    { 
     //basic SetUp method 
     OnSetUp(); 
    } 

    public virtual void OnSetUp() 
    { 
    } 

    [Test] 
    public void SomeTestCase() 
    { 
     //... 
    } 

    [Test] 
    public void SomeOtherTestCase() 
    { 
     //... 
    } 
} 

[TestFixture] 
public class TestClassWithSpecificSetUp : BaseTestsClass 
{ 
    public virtual void OnSetUp() 
    { 
     //setup some fields 
    } 
} 

[TestFixture] 
public class OtherTestClassWithSpecificSetUp : BaseTestsClass 
{ 
    public virtual void OnSetUp() 
    { 
     //setup some fields 
    } 
} 

Sử dụng TestFixture parametrised cũng có thể có ích. Các bài kiểm tra trong lớp học sẽ được ăn trưa theo phương pháp TestFixture, SetUp. Nhưng hãy nhớ rằng

đồ đạc tham số được (như bạn đã phát hiện ra) bị hạn chế bởi thực tế là bạn chỉ có thể sử dụng đối số được cho phép trong các thuộc tính

Cách sử dụng:

[TestFixture("some param", 123)] 
[TestFixture("another param", 456)] 
public class SomeTestsClass 
{ 
    private readonly string _firstParam; 
    private readonly int _secondParam; 

    public WhenNoFunctionCodeExpected(string firstParam, int secondParam) 
    { 
     _firstParam = firstParam; 
     _secondParam = secondParam; 
    } 

    [Test] 
    public void SomeTestCase() 
    { 
     ... 
    } 
} 
Các vấn đề liên quan