没找到单元测试论坛,只好在这里发了。
拿了个程序想试试TestDriven的用法,在form用4个TEXT传long型值;1个button发生事件调用,但是有如下问题:
1.在TestFixture外Run Test会提示0pass,0fail,1skipped,是因为Test时我没有调出页面传值,对吗?但是我在方法内赋值4个long型再Test还是同样结果,为什么?
2.从main()前Run Test顺利弹出form,输入数值后,output中并没有expected和actual值的比较,也就是两个Accert.Artequal没有执行,为什么?
3.Ad-Hoc测试应该是可以直接测return返回值并显示在output中,Test不是不能针对非public和void的吗?
4.从单元测试角度,还应该测试哪里?我现在只设计了除For循环外路径的用例。
如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using NUnit.Framework;
namespace WindowsApplication2
{
[TestFixture]
public partial class Form1 : Form
{
//long synokngk = 0; long hokenryou = 0; long kaigohokenryou = 0; long koureihokenryou = 0;//将属性写在方法内内部赋值也显示1 skipped
public Form1()
{
InitializeComponent();
}
private void label1_Click(object sender, EventArgs e)
{
}
private void Form1_Load(object sender, EventArgs e)
{
}
#region
[Test]
public void Gethokenryou(long synokngk , long hokenryou , long kaigohokenryou , long koureihokenryou)//这里原来是private long[],按要求改为public void,同时下面的return全部都被注释掉
{
try
{
long[] hoken = new long[3];
hoken[0] = 0;
hoken[1] = 0;
hoken[2] = 0;
if (hokenryou == 0 && kaigohokenryou == 0 && koureihokenryou == 0)
{
hoken[0] = synokngk;
hoken[1] = 0;
hoken[2] = 0;
//return hoken;
Assert.AreEqual(3, hoken[0]);//此断言没有执行
//Assert.AreEqual(2, hoken[1]);
//Assert.AreEqual(3, hoken[2]);
}
if (synokngk < 0)
{
synokngk = synokngk * -1;
if (hokenryou <= 0 && kaigohokenryou <= 0 && koureihokenryou <= 0)
{
hokenryou = hokenryou * -1;
kaigohokenryou = kaigohokenryou * -1;
koureihokenryou = koureihokenryou * -1;
}
else
{
if (hokenryou < 0)
{
hokenryou = 0;
}
if (kaigohokenryou < 0)
{
kaigohokenryou = 0;
}
if (koureihokenryou < 0)
{
koureihokenryou = 0;
}
}
for (; synokngk > 0; )
{
if (synokngk >= hokenryou)
{
hoken[0] += hokenryou;
synokngk = synokngk - hokenryou;
}