我们正在尝试使用Fitnesse进行功能测试.我应该嘲笑依赖项还是应该对数据库进行测试?
两种方法的优点/缺点是什么?
针对数据库进行测试的整个问题是设置数据,这是一个巨大的依赖性.如果我们嘲笑那么它是真正的功能测试吗?
谢谢
我有一个资源,其中新操作需要用户登录才能查看.如果用户尝试在未登录的情况下创建新资源,则会将其重定向(302'd)到登录页面.我的功能测试如下:
test "should not get new unless logged in" do
get :new
assert_response :redirect
end
Run Code Online (Sandbox Code Playgroud)
stacktrace看起来像这样:
ArgumentError: uncaught throw :warden
/.../gems/warden-1.1.1/lib/warden/proxy.rb:114:in `throw'
/.../gems/ruby-1.9.2-p318/gems/warden-1.1.1/lib/warden/proxy.rb:114:in `authenticate!'
/.../gems/ruby-1.9.2-p318/gems/devise-2.0.4/lib/devise/controllers/helpers.rb:48:in `authenticate_user!'
Run Code Online (Sandbox Code Playgroud)
在新操作之前,我有一个before_filter到authenticate_user.
我理解为什么authenticate_user!失败但我无法理解为什么它会抛出一个错误.不应该只是像在webapp中那样表现.将用户重定向到登录页面?
谢谢.
我了解您可以使用Scala API执行此操作,如下所示:
https://groups.google.com/forum/?fromgroups=#!topic/play-framework/1vNGW-lPi9I
但似乎没有办法使用Java,因为FakeRequests的withFormUrlEncodedBody方法只支持字符串值?
这是API中缺少的功能还是有任何解决方法?(仅使用Java).
是否有人知道任何允许Geb功能测试用于性能测试的工具?
在"持续交付"一书中,建议功能测试可用于性能测试,只是想知道是否有人有任何想法如何使用Gradle,Spock和Geb实现.
为了给出上下文,目前,我们正在使用JMeter脚本来模拟在页面上随机链接之后爬行我们站点的大量用户.这样可以相对较好地覆盖链接到内容,但是网站的某些区域(例如搜索和登录功能)不会被触及.
提前致谢.
我目前正在尝试编写功能测试但是在登录并重定向到新页面后我遇到了问题.一切正常,直到最后一次断言.重定向工作正常,重定向后的内容页面没问题,但我在上次断言时收到错误:断言false为真.在这里我没有发现任何可以帮助我解决类似问题
这是代码:
class DefaultControllerTest extends WebTestCase
{
public function testIndex()
{
$client = static::createClient(array(),
array(
'HTTP_HOST' => 'locahost'
));
$crawler = $client->request('GET', '/login');
echo $client->getRequest()->getUri();
$form = $crawler->selectButton('Login')->form(array(
'_username' => 'user',
'_password' => 'pass',
),'POST');
$client->submit($form);
$this->assertTrue($client->getResponse()->isRedirect());
$client->followRedirect();
echo $client->getRequest()->getUri();
print_r( $client->getResponse()->getContent());
$this->assertTrue($crawler->filter('html:contains("New")')->count() > 0);
}
Run Code Online (Sandbox Code Playgroud)
}
背景:
我们有一个用Java编写的相当大的REST API,我们正在测试单元和功能测试的组合.在测试时需要许多变化,特别是在功能级别.虽然单元测试是在树中进行的,但功能测试位于单独的代码存储库中.
我们目前正在使用Jacoco进行测试覆盖,使用TestNG来运行我们的单元测试,但我相信我的问题的答案应该适用于其他工具组合.
我们在Jenkins有几个不同的工作,由主要项目的签到触发.这些包括运行Coverity等工具的作业以及几个不同的功能测试作业.在所有下游作业成功完成之前,这些作业由初始提交触发,该提交不被视为"绿色".
问题:
我们如何获取覆盖率报告(如Jacoco二进制文件和TestNG xml文件)并将它们组合在一起以显示我们所有测试的总代码覆盖率?具体来说,如果它们存在于同一作业/目录中,我们知道如何组合它们,但这些文件分布在可能在不同时间运行的多个Jenkins作业中.
根据我的经验,最常被接受的处理方法是使用 Promoted Builds Plugin来触发所有作业,然后在完成触发作业时拉出它们的工件.但是,当你有一两个以上的工作试图卷起时,我觉得这个尺度并不是很好.当您在主项目(旧版本等)上有多个变体时尤其如此.
我知道可以在Jenkins中指纹文件,以便我们知道-.jar与作业A,B和C中使用的版本相同.是否存在可以根据存在的情况检索与模式匹配的所有文件的插件不同的指纹文件?
一种替代解决方案(可能从ant/groovy脚本运行)是将测试数据推送到与git commit hash绑定的某个目录,并根据git检索汇总作业中的所有此类数据提交基础项目的哈希值.
有没有简单的方法来做到这一点?有没有人想出更好的其他方法来解决这个问题?
谢谢,
迈克尔
单元测试的编写和维护成本更低,但它们并不涵盖所有场景.他们之间的平衡是什么?
我很想知道谁在测试Chrome.
我主要是因为它已成为我的主要浏览器,因此所有开发都在Chrome上进行,然后我使用IE和Firefox进行测试.
我目前正在努力保持我的控制器规格DRY和简洁,并在每个示例下降为一个断言.我遇到了一些困难,特别是在嵌套的结构中将实际的控制器请求调用放在哪里以匹配各种边缘情况.
这是一个示例,简化为演示问题:
describe MyController do
let(:item) { Factory(:item) }
subject { response }
describe "GET #show" do
before(:each) do
get :show
end
context "published item" do
it { should redirect_to(success_url) }
end
context "unpublished item" do
before(:each) do
item.update_attribute(published: false)
end
it { should redirect_to(error_url) }
end
end
end
Run Code Online (Sandbox Code Playgroud)
显然这是一个人为的例子,但它说明了我想做什么和什么不行.主要是,before"未发布"上下文中的块是问题所在.由于上下文嵌套的方式,我在调用后实际发生的设置数据的变化会发生什么变化get,因此该上下文中的示例实际上是使用初始场景而不是我想要的场景.
我理解为什么会发生这种情况以及上下文如何嵌套.我想我会喜欢有一些方法来告诉RSpec的想什么,我就向右运行后,任何before尚未右勾拳之前给定的范围内的任何断言.这对控制器规格来说是完美的.我想利用我的控制器规范中的嵌套来逐渐构建边缘情况的变体,而不必将get调用分散,甚至do_get在我的每个it断言中调用助手.这与it_should我正在使用的任何自定义宏保持同步尤其令人讨厌.
目前RSpec还有什么可以实现这一目标吗?有什么技巧可以用来接近吗?它看起来非常适合我看到很多人编写控制器规格的方式; 根据我的发现,人们基本上已经决定do_get在每次断言之前都要求帮助者.有没有更好的办法?
我有一个before_filter在我的ApplicationController班,我想为它编写一个测试?我应该把这个测试写在哪里?我不想进入每个子类控制器测试文件并重复有关此过滤器的测试.
因此,测试ApplicationControllerbefore_filters 的推荐方法是什么?
请注意,我用Rails 3.2.1用minitest.
testing ruby-on-rails before-filter functional-testing ruby-on-rails-3