场景:
同一个项目中有workflow项目以及对wf的Unit Test项目, UT项目通过Service References 对WF项目访问并测试,UT项目使用如下方式访问WF服务:
[TestClass]
public class WorkflowUnitTest
{
private MessageTransferClient clientInstance = null;
[TestInitialize]
public void TestInit()
{
clientInstance = new MessageTransferClient("EP_Http");
}
[TestMethod]
public void CreateInstanceTest()
{
// to do clear instance
Operation op = Operations.CreateInstance;
op.SubRegion = "asl";
var wfRequest = new SaRequest() { WeekId = new Random().Next(150, 10000), Operation = op, Roles = new string[] { "Asl" } };
var wfResponse = clientInstance.InstanceCreated(wfRequest);
Assert.AreEqual(wfResponse.GetType().ToString(), typeof(SaResponse).ToString());
Assert.AreEqual(wfResponse.AlmState, States.ALMStart);
Assert.AreEqual(wfResponse.AslState, States.ASLStart);
Assert.AreEqual(wfResponse.BudgetState, States.BudgetStart);
}// 说明:wfRequest 和wfRequest是自定义类,用于wf之间传递消息的
}
说明补充:
1. workflow用到的表都是系统自带脚本创建的
2. 加粗部分表示这个作为wf 实例对象的唯一标示符
问题1:WeekId 我是用的是随机数,目的时,测试时保证你每次运行测试都可以创建一个新的wf实例,我现在想解决这个问题,因为,我的每个测试方法里面都是用随机数来创建实例的,这个在生产环境是不行的。
问题2:我如何清除unit test产生的wf 实例对象呢? 因为,当你的unit test 完成后,你要保证你ut 所产的wf对象要清除掉,不能驻留数据库以免对生产环境数据产生影响。
问题3: UT项目,你懂的,会写很多[TestMethod] 的方法,所以,只是用一个wf 实例对象呢,现在我的每个方法都是自己创建一个wf实例,多少个方法,将来测试完成后就会有多少个wf的对象,这是不应该。
初次接触workflow,基础没学好,英文也比较差,请各位大神好心帮忙下,回复若不及时还望见谅。谢谢各位了。
好几天都没人回答我的问题,我自己回答一下吧。
我现在的解决方案时,手动查询数据库,每次获取到最新创建的实例ID,然后记录下来,测试完成后,使用存储过程删除创建的。