我是单元测试的新手,所以我想得到一些更多的人的意见.
我很快就要编写一些屏幕抓取代码.目标系统是一个web ui,其中包含大量的HTML解析和类似的易失性.我永远不会收到目标系统发生任何变化的通知(例如,他们对其网站进行了重新设计或以其他方式更改了功能).所以我预计我的代码会定期打破.
所以我认为我真正的问题是,我的单元测试中有多少(如果有的话)应该担心或处理界面(我正在抓取的网站)变化?
我认为单元测试与否,我将需要在运行时进行大量测试,因为我需要确保我所消耗的数据是原始的.即使我在每次运行之前运行单元测试,Web UI仍然可以在测试和运行时之间进行更改.
那么我是否专注于代码内测试和异常处理?这是否意味着在沙子中绘制一条线并完全排除单元测试中的这种测试?
谢谢
有没有更好的方法来拥有一个全局可访问的Zend_Log对象?
在Bootstrap.php我正在做:
protected function _initLogging()
{
$logger = new Zend_Log();
$writer = new Zend_Log_Writer_Stream(APPLICATION_PATH . '/../app.log');
$logger->addWriter($writer);
Zend_Registry::set('log', $logger);
}
Run Code Online (Sandbox Code Playgroud)
然后在整个应用程序中我将使用:
Zend_Registry::get('log')->debug('hello world');
Run Code Online (Sandbox Code Playgroud)
我想这并不可怕.它看起来有点冗长.
鉴于以下代码,哪种注册方法更好,为什么?或者这个代码是否应该以其他方式完全改进?
我对上述"更好"的想法基本归结为1)大多数哲学上正确的(最佳实践)和2)最有效/高效的.
Class Course < ActiveRecord::Base
has_many :enrollments # basically a join table
has_many :students, :source => :user, :through => :enrollments
def enroll_this_way(student)
self.enrollments << Enrollment.new(:course_id => self.id, :student_id => student.id)
end
# OR
def enroll_that_way(student_id)
self.enrollments << Enrollment.new(:course_id => self.id, :student_id => student_id)
end
end
Run Code Online (Sandbox Code Playgroud)