How to set up a URL variable to be used in NUnit/SpecFlow framework

本秂侑毒 提交于 2019-12-11 06:12:17

问题


I'd like to extend the Test Harness I have written in SpecFlow to be a bit more extensible, so what I would like to do is in the setup create a base URL variable that I can set depending on a flag I use on the Nunit runner. So if I send in Test as a Tag I want some URL value to be set to "http://test/" or for Development to set URL to "http://dev/". I know Global variables are not useful in NUnit, most of my previous scripting was in Perl where even then I used it on rare occasions. I'm not sure I am doing this right, although I get the code to compile without errors the URL never get's set. What I am doing is a check when the NUnit runner starts:

private static testInfoConfiguration myUrl;
public static string baseUrl = string.Empty;
[BeforeFeature("Test")]
public static void BeforeFeature_Test()
{

    myUrl = new testInfoConfiguration();
    baseUrl = myUrl.setBaseUrl("Test");
}

Which calls this:

public class testInfoConfiguration
{
public string setBaseUrl(string envType)
    {
        string envUrl;
        if (envType == "Test")
        {
            envUrl = "http://testweb/";
            return envUrl;
        }
        if (envType == "Prod")
        {
            envUrl = "http://www/";
            return envUrl;
        }
        envUrl = "http://devweb/";
        return envUrl;
    }

I then want to make a call to the URL variable later on:

[When(@"I access the Web Site")]
public void WhenIAccessTheWebSite()
{
    string kcUrl = baseUrl + "/knowledge/Pages/default.aspx";
    driver.Navigate().GoToUrl(kcUrl);

When I call the URL variable it's still empty. Is there a way to do this? I'm still learning C#, NUnit and SpecFlow so I am probably just not looking at the right aspect of this to where I am going wrong. Or just really not understanding how to set a variable in this manner.

Edit: Adjusting the existing code


回答1:


In this block of code:

private static testInfoConfiguration myUrl; 
public string baseUrl = "";     
[BeforeFeature("Test")] 
public static string BeforeFeature_Test() 
{ 

    myUrl = new testInfoConfiguration(); 
    string baseUrl = myUrl.setBaseUrl("Test"); 
    return baseUrl; 
} 

You're defining baseUrl twice: once in the scope of the method, and once in the scope of the class.

When you're in this block of code:

string kcUrl = baseUrl + "/knowledge/Pages/default.aspx";      
driver.Navigate().GoToUrl(kcUrl);   

You're referring to (what I assume) is the instance field baseUrl, which you never set.

Try the following:

private static testInfoConfiguration myUrl; 
public static string baseUrl = string.Empty;     
[BeforeFeature("Test")] 
public static void BeforeFeature_Test() 
{ 
    myUrl = new testInfoConfiguration(); 
    baseUrl = myUrl.setBaseUrl("Test");       
} 


来源:https://stackoverflow.com/questions/8057462/how-to-set-up-a-url-variable-to-be-used-in-nunit-specflow-framework

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!