从单元测试调用方法失败并出现错误"does not contain a definition"



我的代码有一些问题…你能帮我一下吗?

我试着在Visual Studio上做一个测试单元,下面是代码:

public partial class frmCalculator : Form
{
    string operand1 = string.Empty;
    string operand2 = string.Empty;
    string result;
    char operation;
    public frmCalculator()
    {
        InitializeComponent();
    }
    private void frmCalculator_Load(object sender, EventArgs e)
    {
        btnOne.Click += new EventHandler(btn_Click);
        btnTwo.Click += new EventHandler(btn_Click);
        btnThree.Click += new EventHandler(btn_Click);
        btnFour.Click += new EventHandler(btn_Click);
        btnFive.Click += new EventHandler(btn_Click);
        btnSix.Click += new EventHandler(btn_Click);
        btnSeven.Click += new EventHandler(btn_Click);
        btnEight.Click += new EventHandler(btn_Click);
        btnNine.Click += new EventHandler(btn_Click);
        btnZero.Click += new EventHandler(btn_Click);
        btnDot.Click += new EventHandler(btn_Click);
    }
    void btn_Click(object sender, EventArgs e)
    {
        try
        {
            Button btn = sender as Button;
            switch (btn.Name)
            {
                case "btnOne":
                    txtInput.Text += "1";
                    break;
                case "btnTwo":
                    txtInput.Text += "2";
                    break;
                case "btnThree":
                    txtInput.Text += "3";
                    break;
                case "btnFour":
                    txtInput.Text += "4";
                    break;
                case "btnFive":
                    txtInput.Text += "5";
                    break;
                case "btnSix":
                    txtInput.Text += "6";
                    break;
                case "btnSeven":
                    txtInput.Text += "7";
                    break;
                case "btnEight":
                    txtInput.Text += "8";
                    break;
                case "btnNine":
                    txtInput.Text += "9";
                    break;
                case "btnZero":
                    txtInput.Text += "0";
                    break;
                case "btnDot":
                    if(!txtInput.Text.Contains("."))
                        txtInput.Text += ".";
                    break;
            }
        }
        catch(Exception ex)
        {
            MessageBox.Show("Sorry for the inconvenience, Unexpected error occured. Details: " +
                ex.Message);
        }
    }
    private void txtInput_KeyPress(object sender, KeyPressEventArgs e)
    {
        switch (e.KeyChar)
        {
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
            case '0':
            //case '+':
            //case '-':
            //case '*':
            //case '/':
            //case '.':
                break;
            default:
                e.Handled = true;
                MessageBox.Show("Only numbers, +, -, ., *, / are allowed");
                break;
        }           
    }
    private void txtInput_TextChanged(object sender, EventArgs e)
    {
    }
    private void btnPlus_Click(object sender, EventArgs e)
    {
        operand1 = txtInput.Text;
        operation = '+';
        txtInput.Text = string.Empty;
    }
    private void btnMinus_Click(object sender, EventArgs e)
    {
        operand1 = txtInput.Text;
        operation = '-';
        txtInput.Text = string.Empty;
    }
    private void btnMulitply_Click(object sender, EventArgs e)
    {
        operand1 = txtInput.Text;
        operation = '*';
        txtInput.Text = string.Empty;
    }
    private void btnDivide_Click(object sender, EventArgs e)
    {
        operand1 = txtInput.Text;
        operation = '/';
        txtInput.Text = string.Empty;
    }
    private void btnEqual_Click(object sender, EventArgs e)
    {
        operand2 = txtInput.Text;
        double opr1, opr2;
        double.TryParse(operand1, out opr1);
        double.TryParse(operand2, out opr2);
        switch (operation)
        {
            case '+':
                result = (opr1 + opr2).ToString();
                break;
            case '-':
                result = (opr1 - opr2).ToString();
                break;
            case '*':
                result = (opr1 * opr2).ToString();
                break;
            case '/':
                if (opr2 != 0)
                {
                    result = (opr1 / opr2).ToString();
                }
                else
                {
                    MessageBox.Show("Can't divide by zero");
                }
                break;
        }
        txtInput.Text = result.ToString();
    }
    private void btnClear_Click(object sender, EventArgs e)
    {
        txtInput.Text = string.Empty;
        operand1 = string.Empty;
        operand2 = string.Empty;
    }
    private void btnSqrRoot_Click(object sender, EventArgs e)
    {
        double opr1;
        if (double.TryParse(txtInput.Text, out opr1))
        {
            txtInput.Text = (Math.Sqrt(opr1)).ToString();
        }
    }
    private void btnByTwo_Click(object sender, EventArgs e)
    {
        double opr1;
        if (double.TryParse(txtInput.Text, out opr1))
        {
            txtInput.Text = (opr1 / 2).ToString();
        }
    }
    private void btnByFour_Click(object sender, EventArgs e)
    {
        double opr1;
        if (double.TryParse(txtInput.Text, out opr1))
        {
            txtInput.Text = (opr1 / 4).ToString();
        }
    }


}

and my Class Test:

[TestClass()]
public class frmCalculatorTests
{
    [TestMethod()]
    public void valor_limite_maximo(object sender, EventArgs e)
    {
        var calculadora = new frmCalculator();
        var retorno = calculadora.btnEqual_Click(123456789, 123456789);
        Assert.AreEqual(246913578, retorno);
    }
}

程序显示的信息是:

错误1 'SimpleCalculator.frmCalculator'不包含'btnEqual_Click'的定义,并且没有扩展方法'btnEqual_Click'接受类型'SimpleCalculator.frmCalculator'的第一个参数可以找到(您是否缺少using指令或汇编引用?)C:UsersmileneDesktopnova calc-talvez certaSimple Calculator simpleccalculatortests frmCalculatorTests.cs 21 39 simpleccalculatortests

我怎么能解决这个问题?

您可以使用calculadora.btnEqual.PerformClick ()在此之前,您必须初始化文本(这对(123456789,123456789)不是有效的参数)。

您必须将UI部分与业务逻辑分开。例如:类CBusinessLogicvoid OnBtnClick(字符串名称){开关(名称){case "btnOne": view.AddInput("1")等}}

'view'是CBusinessLogic的成员,是你的对象'calculadora'。创建表单后,创建CBusinessLogic类,传递(例如在构造函数中)对象"calculadora"。该表单还必须创建一个对CBusinessLogic的引用。

必须更改表单以调用CBusinessLogic对象:

void btn_Click(object sender, EventArgs e)
{
    Button btn = sender as Button;
    businessLogic.OnBtnClick(btn.Name);
}
String GetInput()
{
    return txtInput;
}
void AddInput(String digit)
{
     txtInput.Text += digit;
}

这是设计模式MVC的应用。使用它,您可以测试应用程序调用方法,例如字符串之前= calculadora.GetInput ();businessLogic.OnBtnClick (" 1 ");你可以验证输入是否改变了字符串后= calculadora.GetInput ();Assert.AreEqual(前+ " 1 ",后),

你使用的参数是错误的,因为btnEqual_Click期望一个对象"sender"(可能是表单或其他对象调用方法…当然不是一个整数)和click的参数(EventArgs),而不是一个整数。我想你是想模拟"加法运算"的结果。你必须使用OnBtnClick("1"),然后OnBtnClick("2")…OnBtnClick("9")为第一个数字。然后OnBtnPlusClick()。然后OnBtnClick("1")……etc用于第二个数字,然后是onbtequal()。此时,您可以检查结果是否符合您的期望。

这些方法被标记为private,因此不能在表单范围之外访问。

相关内容

最新更新