[英]Error 'Object reference not set to an instance of an object' when instantiated class of method
我在MS Visual C#2010 Express中創建了兩個項目。 第一個項目使用方法TheSugarCrmLoginTest()創建一個SugarcrmLogin類。
第二個項目具有使用方法Main的Sugarcrm類。 該項目具有對第一個項目的項目dll的引用。
在Main方法中,我實例化了SugarcrmLogin類,並將其稱為SugarCrmLoginTest()方法。
這里是第二個項目中Main方法的代碼,我在其中實例化該類並調用該方法:
public static void Main()
{
SugarcrmLogin Login;
Login = new SugarcrmLogin();
Login.TheSugarcrmLoginTest();
}
這兩個項目都在MS Visual C#中成功構建,但是當我嘗試使用Nunit運行第二個項目的項目dll時,出現錯誤“對象引用未設置為對象的實例”,並引用了TheSugarCrmLoginTest()方法。第一個項目。
using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.IE;
using OpenQA.Selenium.Support.UI;
namespace SeleniumTests
{
[TestFixture]
public class SugarcrmLogin
{
private IWebDriver driver;
private StringBuilder verificationErrors;
private string baseURL;
private bool acceptNextAlert = true;
[SetUp]
public void SetupTest()
{
//driver = new FirefoxDriver();
driver = new InternetExplorerDriver();
baseURL = "http://127.0.0.1/";
verificationErrors = new StringBuilder();
}
[TearDown]
public void TeardownTest()
{
try
{
driver.Quit();
}
catch (Exception)
{
// Ignore errors if unable to close the browser
}
Assert.AreEqual("", verificationErrors.ToString());
}
[Test]
public void TheSugarcrmLoginTest()
{
driver.Navigate().GoToUrl(baseURL + "/sugarcrm/index.php?module=Users&action=Login");
driver.FindElement(By.Id("user_name")).Clear();
driver.FindElement(By.Id("user_name")).SendKeys("admin");
driver.FindElement(By.Id("user_password")).Clear();
driver.FindElement(By.Id("user_password")).SendKeys("admin");
driver.FindElement(By.Id("login_button")).Click();
}
private bool IsElementPresent(By by)
{
try
{
driver.FindElement(by);
return true;
}
catch (NoSuchElementException)
{
return false;
}
}
private bool IsAlertPresent()
{
try
{
driver.SwitchTo().Alert();
return true;
}
catch (NoAlertPresentException)
{
return false;
}
}
private string CloseAlertAndGetItsText()
{
try
{
IAlert alert = driver.SwitchTo().Alert();
string alertText = alert.Text;
if (acceptNextAlert)
{
alert.Accept();
}
else
{
alert.Dismiss();
}
return alertText;
}
finally
{
acceptNextAlert = true;
}
}
}
}
using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.IE;
using OpenQA.Selenium.Support.UI;
namespace SeleniumTests
{
[TestFixture]
public class Sugarcrm
{
public IWebDriver driver;
private StringBuilder verificationErrors;
public string baseURL;
private bool acceptNextAlert = true;
[SetUp]
public void SetupTest()
{
//driver = new FirefoxDriver();
driver = new InternetExplorerDriver();
baseURL = "http://127.0.0.1/";
verificationErrors = new StringBuilder();
}
[TearDown]
public void TeardownTest()
{
try
{
driver.Quit();
}
catch (Exception)
{
// Ignore errors if unable to close the browser
}
Assert.AreEqual("", verificationErrors.ToString());
}
[Test]
public static void Main()
{
SugarcrmLogin Login;
Login = new SugarcrmLogin();
Login.TheSugarcrmLoginTest();
}
private bool IsElementPresent(By by)
{
try
{
driver.FindElement(by);
return true;
}
catch (NoSuchElementException)
{
return false;
}
}
private bool IsAlertPresent()
{
try
{
driver.SwitchTo().Alert();
return true;
}
catch (NoAlertPresentException)
{
return false;
}
}
private string CloseAlertAndGetItsText()
{
try
{
IAlert alert = driver.SwitchTo().Alert();
string alertText = alert.Text;
if (acceptNextAlert)
{
alert.Accept();
}
else
{
alert.Dismiss();
}
return alertText;
}
finally
{
acceptNextAlert = true;
}
}
}
}
使用顯示代碼的編輯: driver
為null
。 構造函數不分配它,你不叫SetupTest()
這確實方法。
坦白地說,您的Sugarcrm
單元測試不應實例化並調用另一個IMO這樣的單元( SugarcrmLogin
)單元測試。 這似乎是“錯誤地使用了單元測試框架”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.