我的代码有一些问题…你能帮我一下吗?
我试着在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
,因此不能在表单范围之外访问。