3

_createAccount()采用以下两个参数的方法

def _createAccount(self,username,emailID):
    <statements to create account with respect to received emailID>

需要使用 unittest 测试此方法,即使用单个测试方法我想一次发送两个具有相同 emailID 和不同用户名的请求。这两个请求之一必须得到响应,就像已经使用此 emailID 创建的帐户一样。如何createAccount requests与单元测试并行发送。

4

1 回答 1

1

我猜这段代码将在 Web 应用程序中运行,因此可以一次处理多个请求。

一种方法是在测试中创建线程,在不同的线程中运行该方法并检查结果,但这有很多警告。一旦并行执行线程,执行顺序就不再是确定性的,而是取决于调度程序,这可以被认为或多或少是随机的。这意味着即使您的方法在某些情况下失败(使用精确的订单或执行),也无法确保能够重新创建这些情况。换句话说,通过测试不会告诉您任何有关该方法有效性的信息。

对于这种同步问题,您必须编写代码以确保您不希望发生两次的事情不会发生。为此,您需要确保您的创建/验证代码是原子的。

例如,如果您正在使用 sql 数据库,您可以在 username 或 emailID 列上指定唯一性约束,以便第二个请求将失败(sql 事务是原子的)。在其他情况下,您可能希望使用锁来确保只有一个线程正在执行“检查是否存在,如果不存在则创建”部分。

于 2012-11-20T10:34:32.870 回答