_createAccount()
方法采用以下两个参数
def _createAccount(self,username,emailID):
<statements to create account with respect to received emailID>
需要使用unittest测试此方法,即使用单个测试方法我想一次发送两个具有相同emailID和不同用户名的请求。
两个请求中的一个必须得到响应,就像已经使用此emailID创建的帐户一样。
如何使用单元测试发送并行createAccount requests
。
答案 0 :(得分:1)
我想这段代码将在Web应用程序中运行,因此一次可以处理多个请求。
一种方法可能是在测试中创建线程,在不同的线程中运行该方法并检查结果,但这需要注意很多。一旦并行执行线程,执行顺序就不再是确定性的,而是依赖于调度程序,调度程序可以被认为或多或少是随机的。这意味着即使您的方法在某些情况下(具有精确的顺序或执行)失败,也无法确保能够重新创建这些情况。换句话说,通过测试不会告诉你关于方法有效性的任何信息。
对于这种同步问题,你必须编写代码以确保你不希望发生两次的事情不能。为此,您需要确保您的创建/验证代码是原子的。
例如,如果您正在使用sql数据库,则可以在username或emailID列上指定唯一性约束,以便第二个请求失败(sql事务是原子的)。在其他情况下,您需要使用锁来确保只有一个线程正在执行“检查是否存在,如果不存在”部分。