我在节点项目中使用mysql。node.js上的单元测试mysql回滚
我想单元测试一个使sql事务的javascript函数。如果事务成为锁定监视器的受害者,则该函数具有处理失败的代码。
还是呢?
因为我是单元测试,所以我只在一个本地数据库上一次创建一个事务,所以永远不会出现死锁,对吧?我如何测试死锁处理,如果它永远不会发生?有没有办法强制它发生?
例子:
thisMustBeDoneBeforeTheQuery();
connection.queryAsync(/*This is an update*/).catch(function(err) {
undoThatStuffIDidBeforeTheQuery();
// I hope that function worked, because my unit tests can't
// make a deadlock happen, so I can't know for sure.
}
你应该嘲笑数据库的东西,并在测试案例假死锁错误。然后你可以测试你的错误代码的有效性。这取决于你的用例。处理持久层的单元测试可能变得非常不安全。这也取决于你的代码如何适合正确的测试策略。 – k0pernikus
相关:https://stackoverflow.com/questions/8389149/how-do-you-mock-mysql-without-an-orm-in-node-js – k0pernikus
它似乎嘲笑SQL可能工作。我会试一试。 –