首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

哪位高手会TestDriven.net或NUint啊断言及使用有关问题!

2012-03-08 
谁会TestDriven.net或NUint啊,断言及使用问题!!!没找到单元测试论坛,只好在这里发了。拿了个程序想试试Test

谁会TestDriven.net或NUint啊,断言及使用问题!!!
没找到单元测试论坛,只好在这里发了。
拿了个程序想试试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;
  }


  else
  {
  hoken[0] += synokngk;
  synokngk = 0;
  break;
  }
  if (synokngk >= kaigohokenryou)
  {
  hoken[1] += kaigohokenryou;
  synokngk = synokngk - kaigohokenryou;
  }
  else
  {
  hoken[1] += synokngk;
  synokngk = 0;
  break;
  }
  if (synokngk >= koureihokenryou)
  {
  hoken[2] += koureihokenryou;
  synokngk = synokngk - koureihokenryou;
  }
  else
  {
  hoken[2] += synokngk;
  synokngk = 0;
  break;
  }
  }
  hoken[0] = hoken[0] * -1;
  hoken[1] = hoken[1] * -1;
  hoken[2] = hoken[2] * -1;
  //Assert.AreEqual(3,hoken[0]);
  //Assert.AreEqual(3,hoken[1]);
  //Assert.AreEqual(3,hoken[2]);

  }
  else
  {
  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;
  }
  else
  {
  hoken[0] += synokngk;
  synokngk = 0;
  break;
  }
  if (synokngk >= kaigohokenryou)
  {
  hoken[1] += kaigohokenryou;
  synokngk = synokngk - kaigohokenryou;
  }
  else
  {
  hoken[1] += synokngk;
  synokngk = 0;
  break;


  }
  if (synokngk >= koureihokenryou)
  {
  hoken[2] += koureihokenryou;
  synokngk = synokngk - koureihokenryou;
  }
  else
  {
  hoken[2] += synokngk;
  synokngk = 0;
  break;
  }
  }
  }
  //return hoken;
  Assert.AreEqual(3, hoken[0]);//此断言不执行,为何?
  //Assert.AreEqual(3, hoken[1]);
  //Assert.AreEqual(3, hoken[2]);
   

  }
   
  catch 
  {
   
   
   
  }
  finally
  {
   
  this.Close();  
   
  }

  }
  #endregion

  private void button1_Click(object sender, EventArgs e)
  {
  long[] ABC = new long[4];
  long t1 = Convert.ToInt64(this.textBox1.Text.ToString().Trim());
  long t2 = Convert.ToInt64(this.textBox2.Text.ToString().Trim());
  long t3 = Convert.ToInt64(this.textBox3.Text.ToString().Trim());
  long t4 = Convert.ToInt64(this.textBox4.Text.ToString().Trim());
  Gethokenryou(t1, t2, t3, t4);

  }
  }
}

[解决办法]
你怎么把要测试的代码和test case放在一个类里了?你需要看一下最基本的NUnit文档,理解一下TDD
[解决办法]
呵呵,我见过的那些满脑子流行的所谓自动化测试工具的人没有一个真正可以做自动化测试的。

也许是我遇到的这方面的人层次不高吧,或许大的团队总有一些人可以用好流行的自动化测试工具。

不过我是一个比较熟练的XP开发者,我非常熟悉自动化测试,各种平台上,我自己都写过自动化测试和压力测试程序。很简单地,只要2天时间足够写一个平台的自动化测试了,当然前提是你首先熟悉这个平台的组件开发关键技术。

[解决办法]
怎么说呢,这就好像中国人用中文注音方式来学英文,也许能学好英文但是很艰苦。

换一种自然而然的做法吧。单元测试绝对不是那些搞手工测试的人抬高自己的手段,因为他们没有深厚的开发的基础。单元测试只有你在实际写代码之前就去先写测试,养成了习惯,甚至你能够自豪地保证100%语句覆盖,才能成为一种实用的技术。

热点排行