问题
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