在测试组件时遇到的奇怪问题。单步可以执行通过,不单步则出现异常
Equn 2008-10-23 11:28:27 使用VS2005\.Net2.0开发,NUnit 2.4.8进行测试。
测试代码如下:
[Test]
public void TestEmployee()
{
employees emps = new employees();
employee emp=emps.add();
emp.name = "曹熠";
emp.number = "0001";
emp.phone="130456456";
emp.ShopId=1;
emp.save();
Assert.Greater(emp.id, 0); //测试是否增加成功,自动生成ID
Assert.Contains(emp, emps.records.Values); //测试员工列表中是否已增加
Assert.IsTrue(emp.ChangePassword("", "123456")); //新用户第一次修改密码,老密码为空,可以修改成功
Assert.IsTrue(emp.CheckPassword("123456"));
emp.UserPower["p"] = true; //设置用户权限
emp.save(); //更新到数据库中
Assert.IsTrue(emp.UserPower["p"]); //检查刚才修改的权限是否有修改,通过
int empid = emp.id;
employee addemp=new employee(empid); //重新从数据库加载刚才增加的员工,直接运行则上面设置的权限数据不能加载,如在此中断运行单步调试则加载正常。数据库数据正常。
Assert.IsTrue(addemp.UserPower["p"]); //检查刚才修改的权限是否有保存,如果是直接运行则此处为false,单步调试则为true
}
[Test]
public void TestID23Emp()
{
employee emp = new employee(23); //加载以前增加的员工数据则正常
Assert.IsTrue(emp.UserPower["p"]); //检查刚才修改的权限是否有保存
}
不知道为什么?直接运行则员工的权限设置数据丢失,单步调试则不会。而且只是新增加的员工会丢失。
employee类的构造函数如下:
/// <summary>根据主键加载对象构造函数</summary>
public employee(int id)
{
database dbconn = new database();
IDataReader dr = dbconn.ExecuteReader("select * from employee where id=" + id.ToString());
if (dr.Read())
{
this.id = (int)dr["id"];
this.insert_date = (DateTime)dr["insert_date"];
this.name = (string)dr["name"];
this.number = (string)dr["number"];
this.mPassword = (string)dr["password"];
this.phone = (string)dr["phone"];
this.PowerStr = (string)dr["PowerStr"];
this.ShopId = (int)dr["ShopId"];
this.status = (int)dr["status"];
UserPower = new powers(this.PowerStr); //根据权限字符串初始化用户权限对象集合
}
dr.Dispose();
dr = null;
dbconn = null;
}
数据库为ACCESS2000,使用OleDbCommand对象的ExecuteNonQuery方法执行“update”更新SQL。