C# 编码用户界面测试

C# 编码用户界面测试,c#,visual-studio,unit-testing,testing,functional-testing,C#,Visual Studio,Unit Testing,Testing,Functional Testing,我想使用编码的ui测试自动化一些测试。我的一些测试涉及对我想要从中断言内容的数据库进行事务处理。但是运行这些自动化测试会带来它们自己的问题,每次测试运行时,它可能会修改(添加、更新或删除记录)数据库的状态。在修改数据库时,是否有一些关于如何创建编码ui测试的一般指导?是否要添加模拟存储库?我是否要创建一个测试环境,该环境具有可以在每次测试运行时恢复为快照的数据库服务器?编码的ui测试是否应该不涉及从数据库事务断言值,而只是断言单击了一个按钮并让单元测试断言数据库事务?IMHO这个问题适用于您编写

我想使用编码的ui测试自动化一些测试。我的一些测试涉及对我想要从中断言内容的数据库进行事务处理。但是运行这些自动化测试会带来它们自己的问题,每次测试运行时,它可能会修改(添加、更新或删除记录)数据库的状态。在修改数据库时,是否有一些关于如何创建编码ui测试的一般指导?是否要添加模拟存储库?我是否要创建一个测试环境,该环境具有可以在每次测试运行时恢复为快照的数据库服务器?编码的ui测试是否应该不涉及从数据库事务断言值,而只是断言单击了一个按钮并让单元测试断言数据库事务?

IMHO这个问题适用于您编写的任何测试,而不仅仅是CodedUI测试

您的测试可以在进行时查询/执行数据库查询。因此,在测试运行结束时,DB将从状态A移动到状态B。因此,最好确保在测试运行开始时运行一些DB刷新脚本,以便确保在运行之前将DB置于状态A,而不考虑其当前状态


值得注意的是,当您在相同的测试数据上运行相同的测试,并且在测试运行开始时DB状态保持不变时,您每次都在执行完全相同的测试,被测试的应用程序很可能对这些测试免疫,并且测试运行最终的回报随着时间的推移而递减。因此,将测试工作所依据的测试数据随机化可能是一个好主意。

这个问题如何适用于您编写的任何测试,而不仅仅是针对CodedUI测试

您的测试可以在进行时查询/执行数据库查询。因此,在测试运行结束时,DB将从状态A移动到状态B。因此,最好确保在测试运行开始时运行一些DB刷新脚本,以便确保在运行之前将DB置于状态A,而不考虑其当前状态


值得注意的是,当您在相同的测试数据上运行相同的测试,并且在测试运行开始时DB状态保持不变时,您每次都在执行完全相同的测试,被测试的应用程序很可能对这些测试免疫,并且测试运行最终的回报随着时间的推移而递减。因此,将测试工作所依据的测试数据随机化可能是一个好主意。

这个问题如何适用于您编写的任何测试,而不仅仅是针对CodedUI测试

您的测试可以在进行时查询/执行数据库查询。因此,在测试运行结束时,DB将从状态A移动到状态B。因此,最好确保在测试运行开始时运行一些DB刷新脚本,以便确保在运行之前将DB置于状态A,而不考虑其当前状态


值得注意的是,当您在相同的测试数据上运行相同的测试,并且在测试运行开始时DB状态保持不变时,您每次都在执行完全相同的测试,被测试的应用程序很可能对这些测试免疫,并且测试运行最终的回报随着时间的推移而递减。因此,将测试工作所依据的测试数据随机化可能是一个好主意。

这个问题如何适用于您编写的任何测试,而不仅仅是针对CodedUI测试

您的测试可以在进行时查询/执行数据库查询。因此,在测试运行结束时,DB将从状态A移动到状态B。因此,最好确保在测试运行开始时运行一些DB刷新脚本,以便确保在运行之前将DB置于状态A,而不考虑其当前状态


值得注意的是,当您在相同的测试数据上运行相同的测试,并且在测试运行开始时DB状态保持不变时,您每次都在执行完全相同的测试,被测试的应用程序很可能对这些测试免疫,并且测试运行最终的回报随着时间的推移而递减。因此,将测试工作所依据的测试数据随机化可能是一个好主意。

它可以是简单的,也可以是复杂的

最简单的方法是每次运行时完全重置数据。这可能意味着每次使用一些模式创建脚本从头开始创建db

更复杂的解决方案是只重置部分模式(即:某些表,取决于测试的性质)。相关表格等

无论您做什么,期望测试按特定顺序运行都是不好的做法。如果您的套件中有50个测试,那么这些测试必须能够以任何顺序运行,并且根据测试人员运行—测试人员可能决定运行您的1个或所有测试


这是高层次的东西。就实际实现而言,您可以找到用属性标记测试的有趣方法,并在那里定义要初始化的内容的值(这可能是要清除的表名,或者如果您使用的是ORM,则可能是1个实体,并从中动态确定相关表。并动态运行清除。

它可以是简单的,也可以是复杂的

最简单的方法是每次运行时完全重置数据。这可能意味着每次都要使用一些模式创建脚本从头开始创建数据库

更复杂的解决方案是只重置部分模式(即:某些表,取决于测试的性质)、相关表等

无论您做什么-期望测试以特定顺序运行都是不好的做法。如果您的套件中有50个测试,那么这些测试必须能够以任何顺序运行,并且根据测试人员运行-测试人员可能决定运行您的1个或所有测试

这是高层次的东西,用术语来说