在编写请求规范时,如何设置会话和/或存根控制器方法?我正在尝试在我的集成测试中删除身份验证 - rspec/requests
这是一个测试的例子
require File.dirname(__FILE__) + '/../spec_helper'
require File.dirname(__FILE__) + '/authentication_helpers'
describe "Messages" do
include AuthenticationHelpers
describe "GET admin/messages" do
before(:each) do
@current_user = Factory :super_admin
login(@current_user)
end
it "displays received messages" do
sender = Factory :jonas
direct_message = Message.new(:sender_id => sender.id, :subject => "Message system.", :content => "content", :receiver_ids => [@current_user.id])
direct_message.save
get admin_messages_path
response.body.should include(direct_message.subject)
end
end
end
Run Code Online (Sandbox Code Playgroud)
帮助者:
module AuthenticationHelpers
def login(user)
session[:user_id] = user.id # session is nil
#controller.stub!(:current_user).and_return(user) # controller is nil
end
end …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用jUnit 4.4执行测试,为一组集成测试执行设置和拆解.拆卸需要可靠运行.我在使用TestNG时遇到了其他问题,所以我想回到jUnit.在运行任何测试之前以及所有测试完成之后,可以执行哪些挂钩?
注意:我们正在使用maven 2进行构建.我尝试过使用maven pre-和post-integration-test阶段,但是,如果测试失败,maven会停止并且不会运行post-integration-test,这没有任何帮助.
是否有人可以清楚地定义这些测试级别,因为我发现在进行TDD或单元测试时难以区分.如果有人能详细说明何时,何时实施这些?
testing tdd integration-testing unit-testing regression-testing
GoLang中是否存在分离单元测试和集成测试的最佳实践(作证)?我有混合的单元测试(不依赖于任何外部资源,因此运行速度非常快)和集成测试(它依赖于任何外部资源,因此运行速度较慢).因此,我希望能够控制是否包含集成测试go test.
最直接的技术似乎是在main中定义-integrate标志:
var runIntegrationTests = flag.Bool("integration", false
, "Run the integration tests (in addition to the unit tests)")
Run Code Online (Sandbox Code Playgroud)
然后在每个集成测试的顶部添加一个if语句:
if !*runIntegrationTests {
this.T().Skip("To run this test, use: go test -integration")
}
Run Code Online (Sandbox Code Playgroud)
这是我能做的最好的吗?我搜索了testify文档,看看是否有一个命名约定或者某些内容为我完成了这个,但没有找到任何东西.我错过了什么吗?
我们正在构建一个复杂的Android应用程序,其中包含许多活动中的许多屏幕和工作流程.我们的工作流程类似于您在银行的ATM机上看到的工作流程,例如,有一个Activity登录过渡到主菜单Activity,可以根据用户的选择转换到其他活动.
由于我们有如此多的工作流程,因此我们需要创建跨多个活动的自动化测试,以便我们可以从头到尾测试工作流程.例如,使用ATM示例,我们希望输入有效的PIN码,验证是否将我们发送到主菜单,选择提取现金,验证我们是否在提取现金屏幕等等,并最终找到自己回到主菜单或"登出".
我们玩过Android(例如ActivityInstrumentationTestCase2)和Positron附带的测试API ,但似乎都没有超出单一范围的测试能力Activity,虽然我们可以在这些工具中找到一些用于某些单元测试的实用工具,但他们赢了不能满足我们测试多个活动的测试场景的需求.
我们对xUnit框架,脚本,GUI记录器/回放等持开放态度,并对任何建议表示感谢.
加载页面后,我有运行和隐藏的代码,并根据xhr返回的数据显示各种项目.
我的集成测试看起来像这样:
it "should not show the blah" do
page.find('#blah').visible?.should be_true
end
Run Code Online (Sandbox Code Playgroud)
当我在上下文中手动转到该测试运行的页面时,#blah 并不像我预期的那样可见.我怀疑Capybara正在查看页面的初始状态(在这种情况下是不可见的),在JS运行之前评估DOM的状态并且未通过测试.
是的,我设置:js => true了包含的描述块:)
任何想法将不胜感激!我希望我不必在这里故意拖延,感觉不稳定,会减慢速度.
单元测试是测试一小段代码的方法(主要是单一方法).
集成测试是测试多个代码区域之间交互的测试(希望它们已经有了自己的单元测试).有时,部分测试代码需要其他代码以特定方式执行操作.这就是Mocks&Stubs的用武之地.因此,我们非常具体地模拟/删除部分代码.这使我们的集成测试可以预测地运行而没有副作用.
所有测试都应该能够独立运行而无需数据共享.如果需要数据共享,这表明系统没有足够的分离.
当与外部API(特别是将使用POST请求修改实时数据的RESTful API)进行交互时,我理解我们可以(应该?)模拟与该API的交互(在此答案中更加雄辩地说明)进行集成测试.我也理解我们可以单元测试与该API交互的各个组件(构造请求,解析结果,抛出错误等).我没有得到的是如何实际解决这个问题.
如何测试与具有副作用的外部API的交互?
一个完美的例子是Google的Content API用于购物.为了能够执行手头的任务,它需要大量的准备工作,然后执行实际请求,然后分析返回值.其中一些没有任何"沙盒"环境.
执行此操作的代码通常具有相当多的抽象层,例如:
<?php
class Request
{
public function setUrl(..){ /* ... */ }
public function setData(..){ /* ... */ }
public function setHeaders(..){ /* ... */ }
public function execute(..){
// Do some CURL request or some-such
}
public function wasSuccessful(){
// some test to see if the CURL request was successful
}
}
class GoogleAPIRequest
{
private $request;
abstract protected function …Run Code Online (Sandbox Code Playgroud) 从Android Studio 1.1rc开始,有单元测试支持,我想知道Android Instrumentation测试和单元测试之间有什么区别.
据我了解:
单元测试对于测试不调用Android API的代码非常有用,而Android测试测试则是集成测试,用于测试Android API特定元素或GUI组件.
但是,如果你在单元测试中使用像Robolectric或Mockito这样的框架,你可以测试Android代码(不需要设备)如果我没有弄错的话.
这是正确的,还是有更大的区别?如果是这样,每个人的用途是什么?
testing android integration-testing unit-testing android-studio
我有一个我用Maven构建的项目,它使用Hibernate(和Spring)从数据库中检索数据等.
我在项目中对DAO的"测试"扩展了Spring,AbstractTransactionalDataSourceSpringContextTests因此可以将DataSource连接到我的测试类中,以便能够实际运行查询/ Hibernate逻辑,获取数据等.
在其他几个项目中,我使用这些类型的测试与HSQL数据库(内存中或指向文件)一起使用,以便能够有效地测试实际的数据库查询逻辑,而无需依赖外部数据库.这很有用,因为它可以避免任何外部依赖关系,并且在运行测试之前数据库的"状态"(每个都包含在回滚的事务中)都已定义良好.
我很好奇关于组织这些测试的最佳方法,这些测试对于Maven来说实际上是一种松散的集成测试.保持这些测试感觉有点脏src/test/java,但从我读过的内容来看,似乎没有一个一致的策略或实践来组织与Maven的集成测试.
从我到目前为止所看到的,似乎我可以使用Failsafe插件(或Surefire的第二个实例)并将其绑定到integration-test阶段,并且我还可以绑定自定义启动或关闭逻辑(例如用于启动/停止HSQL实例)pre-integration-test或post-integration-test.但是,这真的是最好的方法吗?
所以我的问题基本上是 - 用Maven组织这个的普遍接受的最佳做法是什么?我在文档中找不到任何一致的答案.
我想要的是:
test阶段仅运行单元测试pre-integration-test和post-integration-test有没有办法在Maven项目中设置第二个persistence.xml文件,以便用于测试而不是用于部署的普通文件?
我尝试将一个persistence.xml放入src/test/resources/META-INF,它被复制到target/test-classes/META-INF中,但似乎是target/classes/META-INF(来自src/main的副本)尽管mvn -X test以正确的顺序列出了类路径条目,但首选资源是首选的:
[DEBUG] Test Classpath :
[DEBUG] /home/uqpbecke/dev/NetBeansProjects/UserManager/target/test-classes
[DEBUG] /home/uqpbecke/dev/NetBeansProjects/UserManager/target/classes
[DEBUG] /home/uqpbecke/.m2/repository/junit/junit/4.5/junit-4.5.jar
...
Run Code Online (Sandbox Code Playgroud)
我希望能够针对简单的hsqldb配置运行测试,而无需更改JPA配置的部署版本,理想情况是在项目结账后直接进行,无需进行本地调整.