错误'对象引用未设置为对象的实例'当实例化方法类时

时间:2014-07-09 11:31:47

标签: c# nunit

我在MS Visual C#2010 Express中创建了两个项目。第一个项目有一个SugarcrmLogin类,方法是TheSugarCrmLoginTest()。

第二个项目有一个Sugarcrm类,方法是Main。该项目引用了第一个项目的项目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;
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

通过显示代码的修改:drivernull。构造函数不会分配它,也不会调用执行SetupTest()方法。

但是坦率地说,你的Sugarcrm单元测试不应该实例化并调用另一个(SugarcrmLogin)单元测试,就像IMO一样。这似乎"错误地使用您的单元测试框架"。