Unit testing 对于不同用户行为不同的软件,进行单元测试的最佳方法是什么?

Unit testing 对于不同用户行为不同的软件,进行单元测试的最佳方法是什么?,unit-testing,Unit Testing,正如问题的标题所指出的,在应用程序上执行单元测试的最佳方法是什么?根据当前登录的用户的不同,应用程序的行为会有所不同 另外,对于维护内部状态信息的应用程序,执行测试和管理所有测试的最佳方式是什么?为不同类型的用户创建单独的测试,并模拟他们登录(或正在登录)。通过这种方式,您可以测试每种类型的用户的行为,例如,基于用户权限 如果应用程序的内部状态也起到了作用,那么您几乎要为每个(合理的)场景创建测试。如果定义行为的仅仅是登录的用户类型,那么只需为每个用户类型编写一个测试就很容易了[您最终得到了n个

正如问题的标题所指出的,在应用程序上执行单元测试的最佳方法是什么?根据当前登录的用户的不同,应用程序的行为会有所不同


另外,对于维护内部状态信息的应用程序,执行测试和管理所有测试的最佳方式是什么?

为不同类型的用户创建单独的测试,并模拟他们登录(或正在登录)。通过这种方式,您可以测试每种类型的用户的行为,例如,基于用户权限


如果应用程序的内部状态也起到了作用,那么您几乎要为每个(合理的)场景创建测试。

如果定义行为的仅仅是登录的用户类型,那么只需为每个用户类型编写一个测试就很容易了[您最终得到了n个测试;n是用户类型的数量]


如果是某个内部系统状态和用户类型之间的组合,则为每个用户类型的每个状态编写一个测试[最终得到n*m测试;n是用户类型的数量,m是内部系统状态的数量].

如果用户是指系统用户,例如windows登录-那么对于单元测试,最好将您的代码与此依赖项分离

我的意思是让你的代码有一个内部的用户概念,这个概念很容易在单元测试中设置。然后,您的大多数代码将只知道这个内部概念,并且可以在不担心真实登录的情况下进行测试

然后将较难测试的层(将系统用户和您从中获得的所有内容(例如文件夹位置、权限等)映射到您的内部登录的层)最小化。
然后可以使用某种类型的可处理高级登录的验收测试来测试此层。

我假设有某个提供商说“此用户可以执行此操作”或“对于此用户,执行此操作”

如果是这种情况,您只需为该提供程序创建一个存根,并让它针对您想要测试的情况返回不同的内容

如果不是这样,我会创建这样一个提供者

状态也是如此:将状态存储在状态保持类中,并询问它您处于什么状态。在测试环境中,为其创建存根


当然,您还可以对state keeping类进行单元测试。

对于我的应用程序,您可以看到和访问的内容部分取决于您的用户权限。我已经厌倦了让这个问题变得相当一般。我目前正在开发的应用程序是一个ASP.NET web应用程序,因此用户是基于特定于应用程序的权限的,但对于我过去参与的一些其他项目来说,这绝对是明智的建议。