簡體   English   中英

實例化方法類時出現錯誤“對象引用未設置為對象的實例”

[英]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;
            }
        }
    }
}

使用顯示代碼的編輯: drivernull 構造函數不分配它,你不叫SetupTest()確實方法。

坦白地說,您的Sugarcrm單元測試不應實例化並調用另一個IMO這樣的單元( SugarcrmLogin )單元測試。 這似乎是“錯誤地使用了單元測試框架”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM