我已经配置EclEmma不要检测我的单元测试工作正常.但是,编辑器仍然强调测试代码未涵盖.我不希望在单元测试中突出显示,因为它们没有检测到覆盖范围.我怎样才能做到这一点?
在命名空间中定义函数时,
namespace foo {
function bar() { echo "foo!\n"; }
class MyClass { }
}
Run Code Online (Sandbox Code Playgroud)
从另一个(或全局)命名空间调用时,必须指定命名空间:
bar(); // call to undefined function \bar()
foo\bar(); // ok
Run Code Online (Sandbox Code Playgroud)
对于类,您可以使用"use"语句将类有效地导入当前命名空间[编辑:我认为您可以"使用foo"来获取类,但显然不是.]
use foo\MyClass as MyClass;
new MyClass(); // ok, instantiates foo\MyClass
Run Code Online (Sandbox Code Playgroud)
但这不适用于函数[并且考虑到有多少函数会很笨拙]:
use foo\bar as bar;
bar(); // call to undefined function \bar()
Run Code Online (Sandbox Code Playgroud)
您可以对命名空间进行别名以使前缀更短以进行输入,
use foo as f; // more useful if "foo" were much longer or nested
f\bar(); // ok
Run Code Online (Sandbox Code Playgroud)
但有没有办法完全删除前缀?
背景:我正在研究Hamcrest匹配库,它定义了许多工厂函数,其中许多都是为嵌套而设计的.拥有名称空间前缀确实会破坏表达式的可读性.相比
assertThat($names,
is(anArray(
equalTo('Alice'),
startsWith('Bob'),
anything(),
hasLength(atLeast(12))
)));
Run Code Online (Sandbox Code Playgroud)
至
use Hamcrest as …Run Code Online (Sandbox Code Playgroud) 我有一个方法,其中包含一个包含泛型的参数.
public static void readList(List<ModelObject> list)
{
// more code
}
Run Code Online (Sandbox Code Playgroud)
我想一个传递ArrayList的ModelObjectImplementations到这种方法.
ArrayList<ModelObjectImplementation> myList;
myList = ...
readList(myList); // gives compilation error
Run Code Online (Sandbox Code Playgroud)
ModelObject是一个ModelObjectImplementation实现的接口.如何更改方法声明以允许此操作?
我想在我正在测试的同一个类中模拟一个方法.
ClassA {
function hardToTest($arg) {
// difficult to test code
}
function underTest() {
return $this->hardToTest('foo');
}
}
Run Code Online (Sandbox Code Playgroud)
我以为我可以用反射来做这件事,但也许这只是我应该hardToTest进入另一个对象的一个标志.
目前我们正在使用SVN.我想开始使用GitHub,但一个绝对要求是我们需要像我们现在一样对代码进行预先(premerge)验证.GitHub是否支持precommithooks(premergehooks)?
我们是一个由5名开发人员组成的团队.我们达成了一个协议,所有代码(JavaScript)都应该通过类似JSLint的验证.事实证明,自愿验证不起作用,因为它很容易被遗忘.我们怎样才能确保其他人可用的代码能够保证对JSLint(或类似的)进行验证?
我已经看到很多关于使用jQuery选择第一个子元素的最快方法的讨论.可以预料,本机DOM firstChild属性比使用jQuery选择器或选择器组合快得多 - 请参阅http://jsperf.com/jquery-first-child-selection-performance/6.这通常不是问题 - 要么在性能不是很大的地方使用,要么只是访问DOM元素并使用其.firstChild属性就足够了.但是,这有几个问题:
在我看来,将firstChild方法添加到核心jQuery库的成本远远小于其好处.我自己动手创建了一个供自己使用的方法:
$.fn.firstChild = function() {
var ret = [];
this.each(function() {
var el = this.firstChild;
//the DOM firstChild property could return a text node or comment instead of an element
while (el && el.nodeType != 1)
el = el.nextSibling;
if (el) ret.push(el);
});
//maintain jQuery chaining and end() functionality
return this.pushStack(ret);
};
Run Code Online (Sandbox Code Playgroud)
在我在http://jsperf.com/jquery-multiple-first-child-selection创建的测试中,此函数的执行速度比任何其他选项快五倍.测试基于上面提到的测试,但是选择多个元素的第一个子元素,而不是单个元素.
有什么我想念的吗?我应该使用的技术?或者这是一个不应该担心的问题?有没有理由不在jQuery中包含这样的函数?
使用命令行运行测试时遇到问题:如果我像这样运行phpunit:
phpunit -–no-configuration -–filter testAdd DataTest DataProviderTest.php
Run Code Online (Sandbox Code Playgroud)
它工作正常.但是我们使用正则表达式来指定我们想要测试的方法的名称:
phpunit -–no-configuration -–filter /::testAdd$/ DataTest DataProviderTest.php
Run Code Online (Sandbox Code Playgroud)
不幸的是,第二种方法不起作用.源代码是:
<?php
class DataTest extends PHPUnit_Framework_TestCase
{
/**
* @dataProvider provider
*/
public function testAdd($a, $b, $c)
{
$this->assertEquals($c, $a + $b);
}
public function provider()
{
return array(
array(0, 0, 0),
array(0, 1, 1),
array(1, 0, 1),
array(1, 1, 3)
);
}
}
?>
Run Code Online (Sandbox Code Playgroud) 我觉得我拥有SVN世界上最简单的用例:
Test.java在trunkSVN的.trunk到dev-branch.Test.java进入了com/mycompany文件夹trunk.Test.java了dev-branch.dev-branch到trunk.为什么,为什么,SVN不能处理这个?我们做错了吗?这感觉应该很容易,但我公司的每个工程师都受到了阻碍.
在这里寻找面向SVN的答案(不是'移动到git'等).
当我在我的网站上进行实验时,我希望能够找出当前访问者看到的测试和变体.我无法从Optimizely Javascript API中找到如何执行此操作.
我怎样才能获得23的,而不是1对$lastnum1?
$text = "1 out of 23";
$lastnum1 = $this->getEval(eregi_replace("[^* out of]", '', $text));
Run Code Online (Sandbox Code Playgroud) php ×4
java ×2
phpunit ×2
api ×1
eclemma ×1
eclipse ×1
function ×1
generics ×1
github ×1
javascript ×1
jquery ×1
merge ×1
mocking ×1
namespaces ×1
optimizely ×1
performance ×1
regex ×1
svn ×1
unit-testing ×1