我已多次遇到这种困境.我的单元测试是否应该复制他们正在测试的方法的功能以验证其完整性?或者单元测试是否应该尝试使用大量手动创建的输入和预期输出实例来测试方法?
我主要询问的问题是,您测试的方法相当简单,并且可以通过查看代码一分钟来验证其正确的操作.
简化示例(在ruby中):
def concat_strings(str1, str2)
return str1 + " AND " + str2
end
Run Code Online (Sandbox Code Playgroud)
上述方法的简化功能复制测试:
def test_concat_strings
10.times do
str1 = random_string_generator
str2 = random_string_generator
assert_equal (str1 + " AND " + str2), concat_strings(str1, str2)
end
end
Run Code Online (Sandbox Code Playgroud)
我知道大多数时候你测试的方法都不够简单,不能用这种方式来证明这一点.但我的问题仍然存在; 在某些情况下这是一种有效的方法(为什么或为什么不这样做)?
我有这个代码:
Intent intent = new Intent();
intent.setAction(Intent.ACTION_PICK);
intent.setData(ContactsContract.Contacts.CONTENT_URI);
intent.putExtra(EXTRA_ONLINE_ID, (String) v.getTag());
startActivityForResult(intent, PICK_CONTACT);
Run Code Online (Sandbox Code Playgroud)
然后回复:
public void onActivityResult(int reqCode, int resultCode, Intent data) {
switch (reqCode) {
case (PICK_CONTACT):
if (resultCode == Activity.RESULT_OK) {
try {
Uri contactData = data.getData();
String onlineid = data.getStringExtra(EXTRA_ONLINE_ID);
} catch (Exception e) {
e.printStackTrace();
}
}
break;
}
super.onActivityResult(reqCode, resultCode, data);
}
Run Code Online (Sandbox Code Playgroud)
的onlineid变量为空.我怎样才能传递一个值然后再接收它?
编辑
我甚至试过,
Bundle extras = data.getExtras(); // returns null
Run Code Online (Sandbox Code Playgroud) 我有这样定义的MenuItem:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_starred"
android:icon="@drawable/btn_star"
android:title="@string/description_star"
android:checkable="true"
android:checked="true"
android:orderInCategory="1"
android:showAsAction="always" />
</menu>
Run Code Online (Sandbox Code Playgroud)
并以btn_star.xml这种方式定义:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_checked="false"
android:drawable="@drawable/btn_star_off_normal" />
<item
android:state_checked="true"
android:drawable="@drawable/btn_star_on_normal" />
</selector>
Run Code Online (Sandbox Code Playgroud)
当我创建使用此选项菜单,但是,图标永远不会在其选中的状态显示,即使MenuItem的isChecked()属性为true.
我正在使用ActionBarSherlock控件,但是,如果我只是创建一个普通的选项菜单并调用,我得到相同的结果setChecked(true).btn_star_off无论项目的检查状态如何,它仍然显示drawable.
onOptionsItemSelected()正确调用该方法,我可以成功更改checked属性:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.isCheckable()) {
item.setChecked(!item.isChecked());
}
return super.onOptionsItemSelected(item);
}
Run Code Online (Sandbox Code Playgroud)
在此处设置断点会显示isChecked属性已更改,但图标本身未更新以反映正确的状态.
这里有什么我想念的吗?我做错了吗?我无法弄清楚为什么这不能正常工作.
我想让notepad ++运行"ruby {filename_here}"命令,如果当前文件名以.rb结尾,"perl {filename_here}"则以.pl结尾.我试过使用NppExec插件,但它不能做有条件的东西,所以我写了一个蝙蝠
@echo off
if /i %~sx1 == .pl perl "%~f1"
if /i %~sx1 == .rb ruby "%~f1"
if /i %~sx1 == .php php "%~f1"
Run Code Online (Sandbox Code Playgroud)
现在我可以从命令行使用它,如C:\ Program Files\Notepad ++> runscript"D\pl.pl",它工作正常.现在我如何将Notepad ++中的某些键绑定到"runscript $(FULL_CURRENT_PATH)"?我试过使用Run-> Run菜单(F5),但它似乎不起作用..
我正在寻找一种使用xmlstarlet从我的xml中提取和打印元素的方法; 例如,如果我的xml是
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
Run Code Online (Sandbox Code Playgroud)
我想打印出价格= 29.99的book元素:
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
Run Code Online (Sandbox Code Playgroud)
我理解选择这样一个元素的xpath查询(/bookstore/book[price=29.99)但我无法在stdout上打印/转储它.如果我使用'-v'选项并使用-v(.)我没有得到我想要的输出(包含其中的所有标签)我只是得到文本值.应该有一种简单地转储所选元素的方法,这就是我要找的东西.
谢谢你的期待.
是否有为接口方法创建默认实现的首选方法或样式?假设我有一个常用的界面,在90%的情况下我想要的功能是相同的.
我的第一直觉是用静态方法创建一个具体的类.然后,当我想要默认功能时,我会将功能委托给静态方法.
这是一个简单的例子:
接口
public interface StuffDoer{
public abstract void doStuff();
}
Run Code Online (Sandbox Code Playgroud)
具体实施方法
public class ConcreteStuffDoer{
public static void doStuff(){
dosomestuff...
}
}
Run Code Online (Sandbox Code Playgroud)
使用默认功能的具体实现
public class MyClass implements StuffDoer{
public void doStuff(){
ConcreteSuffDoer.doStuff();
}
}
Run Code Online (Sandbox Code Playgroud)
这里有更好的方法吗?
编辑
在看到一些提议的解决方案后,我想我应该更清楚我的意图.本质上我试图解决Java不允许多重继承.另外要明确我不是要声明Java是否应该允许多重继承.我只是在寻找为实现接口的类创建默认方法实现的最佳方法.
我正在使用Eclipse的CheckStyle插件.
它非常适合在99%的时间内找到我不想要的东西,但是我实际上只有1%的时间打算故意违反规则,我想让CheckStyle知道它不需要关注标记警告.
示例:缺少Javadoc注释规则.大多数时候我都希望Javadoc对我的方法发表评论.但是,方法如:
public boolean isValid() {
return valid;
}
Run Code Online (Sandbox Code Playgroud)
没有人可能会过得很快.
是否有类似@SuppressWarnings注释可用于将特定的CheckStyle规则违规标记为可接受的?可能是某种特殊格式的评论?我不想禁用该规则,我只想忽略特定的违规行为.
(我知道在这种情况下我可以编写Javadoc注释,但在其他情况下修复规则违规并不是那么简单).
好吧,我已经通过许多网站教授如何解决它,但想知道如何创建它.我对它的编码方面不感兴趣,但想了解更多关于它背后的算法.例如,当网格生成10个左右时,我会使用任何随机函数在网格上分布自己,但是我又如何设置与之关联的数字并决定打开哪个框?我无法构建任何通用算法,我将如何做到这一点.
我最近加入了一个敏捷软件工程咨询公司作为他们唯一的前端开发人员.
在我看来,敏捷过程的一个特点是你不会对功能进行投资,但我被要求工作的方式是预先编码所有内容,从而创造大量的远期投资.这导致了与团队其他成员的大量分离,并且给我提供了很多压力,要求我为服务器端人员提供功能.
我很难找到前端开发和敏捷过程之间的契合度,并且想知道是否有人有类似的经历以及他们如何处理它们?
从另一个角度来看这将是有趣的.我不是在呻吟,因为我习惯这样工作(我来自机构背景),但似乎这些敏捷专家不知道如何使其与前端开发一起工作.
有没有办法通过变量/属性访问当前脚本的绝对物理路径?似乎没有通过Debug Sampler列出的任何内容.
加载CSV文件和JMX Includes等操作使用当前工作目录作为其相对路径,这令人非常恼火.
android ×2
java ×2
agile ×1
algorithm ×1
checkstyle ×1
cmd ×1
eclipse ×1
extras ×1
frontend ×1
jmeter ×1
menu ×1
menuitem ×1
minesweeper ×1
notepad++ ×1
ruby ×1
tdd ×1
testing ×1
unit-testing ×1
xml ×1
xmlstarlet ×1