2017-12-06 29 views
1

TestFixture 매개 변수 값을 문자열로 가져 와서 Switch 문에 전달하는 방법은 무엇입니까? 시도했지만 문제를 해결할 수 없습니다 "멤버 'ClassLibrary1.Browsers.browser1'은 인스턴스 참조로 액세스 할 수 없으며 대신 형식 이름으로 한정합니다." Init 메서드는 다른 클래스에서이 메서드를 사용했기 때문에 정적이어야합니다. 여기Parameterized Test Fixtures에서 값을 얻는 방법은 무엇입니까?

코드 :

[TestFixture("Chrome")] 
public class Browsers 
{ 
    public static IWebDriver webDriver; 
    private static string baseURL = "https://www.google.com"; 
    private static string browser; 

    private static string browser1; 

    public Browsers(string browser1) 
    { 
     this.browser1 = browser1; 
    } 

    public static void Init() 
    { 
     switch (browser1) 
     { 
      case "Chrome": 
       webDriver = new ChromeDriver(); 
       break; 
      case "IE": 
       webDriver = new InternetExplorerDriver(); 
       break; 
      case "Firefox": 
       webDriver = new FirefoxDriver(); 
       break; 
     } 
     webDriver.Manage().Window.Maximize(); 
     Goto(baseURL); 
    } 
    public static string Title 
    { 
     get { return webDriver.Title; } 
    } 
    public static IWebDriver getDriver 
    { 
     get { return webDriver; } 
    } 
    public static void Goto(string url) 
    {    
     webDriver.Navigate().GoToUrl(url); 
    } 
    public static void Close() 
    { 
     webDriver.Quit(); 
    } 
} 

답변

0

문제는 당신이 클래스의 생성자 내부 정적 필드에 할당하려고하는 것입니다. 생성자는 클래스의 인스턴스을 만들 때 실행됩니다. 그래서 당신은 할 수 없습니다

//This doesn't compile: 
public class Browsers 
{ 
    //snip 
    private static string browser1; 

    public Browsers(string browser1) 
    { 
     this.browser1 = browser1; 
    } 
    //snip 
} 

을 더 this.browser1 필드가 없기 때문에 - static 그래서 인스턴스에 존재하지 않는 browser1 선언했다. C#을 당신을 말하고있다

[TestFixture("My String")] 
public class When_Working_Up_A_Storm 
{ 
    public When_Working_Up_A_Storm(string myString) 
    { 
     _myString = myString; 
    } 

    private string _myString; 

    [Test] 
    public void Magic_Happens() 
    { 
     Assert.AreEqual("My String", _myString); 
    } 
} 
0

, 당신이 정적 메서드에서 인스턴스 멤버를 액세스 할 수 없습니다

난 당신이 대신 같은 것을 목표로했다 생각합니다. 귀하의 경우에 문제가 발생한 이유는 실제로 애트리뷰트를 배치 했더라도 Browsers이 실제로 테스트 픽스처가 아님을 알 수 있습니다. 다양한 유틸리티 메소드를 포함하는 정적 클래스처럼 보입니다. 그게 맞습니까?

TestFixtureAttributeTestFixture 즉 테스트가 포함 된 클래스에 배치하는 것이 올바른 방법입니다. 이 클래스의 생성자에서는 완료 한 것처럼 인수의 값을 저장할 수 있습니다. 그런 다음 직접 또는 유틸리티 클래스의 메소드를 사용하여 올바른 브라우저 인스턴스를 시작할 수 있습니다.

다른 클래스에서 정적 Init 메서드를 사용하여 의미가 무엇인지 설명하지 않았으므로 여기에 대해서는 설명하지 않았지만 설명해 주시면이 답변에 추가됩니다.