我有多个单元测试必须连接到MySQL服务器来检索或修改数据(我知道这更像是集成测试,但我们现在暂不讨论它)。完整的NUnit测试套件在NUnit GUI和NUnit控制台中都没有问题。
我现在正在使用Hudson Continuous Integration自动化构建过程。作为其中的一部分,我介绍了这个批处理命令,它将在构建完整解决方案之后调用NUnit控制台来执行测试:
"C:\Program Files (x86)\NUnit 2.5.10\bin\net-2.0\nunit-console.exe" /framework:net-4.0 Tests\MyTestProject\bin\Debug\MyTestProject.dll /xml=MyTestProject.dll.xml /config:Debug
exit 0
它应该可以工作,但我得到的是连接到数据库服务器的所有测试的这个例外:
MySql.Data.MySqlClient.MySqlException:无法连接到任何指定的MySQL主机。
所以Hudson无法访问MySQL服务器,即使连接字符串与手动执行测试时相同。顺便说一句,Hudson和服务器在同一台机器上,这实际上是我的开发盒。此外,少数不需要数据库的测试也没有问题。
为什么Hudson无法访问MySQL服务器?
UPDATE:并非所有测试都失败,只有使用需要共享内存的连接字符串的测试,如下所示:
server=localhost;user id=root;pooling=false;persist security info=true;connection reset=true;allow user variables=true;password=;protocol=sharedmemory; shared memory name=MYSQL
不包含sharedmemory的测试成功通过。
答案 0 :(得分:1)
为/trace=Debug
设置nunit-console.exe
,也许您会看到更多关于幕后内容的信息
答案 1 :(得分:0)
所以,好像我终于让它发挥了作用。您只需从命令行运行Hudson,而不是Windows服务:
java -jar hudson.war
我再也看不到MySQL的连接问题,甚至连共享内存连接都没有。所有测试都通过。另外,我没有提到我也是从控制台运行MySQL Server,而不是Windows服务。
另一种实现此功能的方法是将Hudson和MySQL Server作为Windows服务运行,但您需要将Hudson帐户更改为用于登录计算机的帐户。