我现在正在学习Mockito,我正在做的一件事就是巩固我的学习是将旧的JUnit测试从使用手动模拟类转换为使用Mockito模拟的类.但是,我遇到了一个我不确定如何处理的情况.
具体来说,我的测试单元构造一个String传递给模拟对象的单元作为方法调用的参数.我想测试一下String是否构造正确.挑战在于,部分String内容是在内部生成并在每次调用时发生变化的散列键.一个可行的解决方案是在我的控制下生成哈希生成并为测试执行注入一个虚拟生成器.但是,这是一项相当多的工作.
我的旧手滚动模拟类将存储传递给它的参数,我可以在我的测试中查询.这允许我String通过以下方式查询via的开头和结尾:
assertTrue(mockFtpClient.getFilePathAndName().startsWith("/data/inbound/XJSLGG."));
assertTrue(mockFtpClient.getFilePathAndName().endsWith(".pdf"));
Run Code Online (Sandbox Code Playgroud)
这足以满足我的口味.所以我的问题是,是否可以使用Mockito查询或获取传递给方法的参数,以便我可以执行与上述类似的操作?
更新24/06/2011:此时我已经除了Gnon的答案.但是,我发现了一些对我有用的东西.即ArgumentCaptor.以下是它的工作原理:
ArgumentCaptor<String> fileNameArgument = ArgumentCaptor.forClass(String.class);
verify(mockFtpClient).putFileOnServer(fileNameArgument.capture());
assertTrue(fileNameArgument.getValue().startsWith(START_FILE_NAME) &&
fileNameArgument.getValue().endsWith(END_FILE_NAME));
Run Code Online (Sandbox Code Playgroud)
Mockito状态的javadoc ArgumentCaptor通常是一个更好的选择,当你有一个特定的参数匹配要求时,就像我在这里做的那样.
我正在寻找Eclipse中的快捷方式,首选项或插件,它将通过可见性修饰符对Java成员进行排序.具体来说,我正在寻找这样排序的类:
public someClass {
//public variables go first followed by
//protected and default variables and lastly
//private variables
//public methods above
//proteted and default methods with
//private methods at the bottom
}
Run Code Online (Sandbox Code Playgroud)
我不是按字母顺序,只是可见性修饰符.
我有以下代码:
public class SomeClass {
//InterfaceUpdateListener is an interface
private InterfaceUpdateListener listener = new InterfaceUpdateListener(){
public void onUpdate() {
SomeClass.this.someMethod(); //complier complains on this line of code
}
};
private void someMethod() {
//do something in here on an update event occuring
}
//other code to register the listener with another class...
}
Run Code Online (Sandbox Code Playgroud)
我在 Eclipse 中的编译器抱怨说
Access to enclosing method 'someMethod' from type SomeClass is emulated by a synthetic accessor method.
谁能准确解释一下
谢谢
我正在玩构建一个新的小部件并且正在查看Android应用程序小部件文档,特别是关于支持哪些小部件类的部分.我注意到ViewFlipper受支持,但我很难找到如何在主屏幕小部件中使用它的任何示例.特别是,我想知道是否可以手动触发交换视图.在一个活动中,这看起来相对简单,一个例子是挂钩按钮的onclick监听器来调用鳍状肢的showNext().
该RemoteViews对象有showNext和showPrevious方法,但我不知道我理解如何挂钩起来,从用户与小部件交互触发的事件.任何人都可以提供何时可以调用这些方法的示例?
看起来小部件中的按钮只能连接到意图而不是代码来练习鳍状肢.如果这个限制为真,那么在app小部件中唯一使用视图翻转器来自动翻转视图吗?
我的应用程序中有一个非常零星的失败,我正试图解决.在进入应用程序时,主UI线程处理结束并将控制权传递给后台线程以检索某些数据.检索数据时,控件会传回主UI线程进行处理以进行显示.然而,在一些罕见的场合(它在99%的时间内工作),AsyncTask似乎无法被调用,使应用程序处于一个不稳定的静态状态,永远等待AsyncTask完成.
这是以下代码的快照Activity:
//method call from main UI thread
private void fetchSomeData() {
Log.d("myTag", "In fecthSomeData()");
new ReadFileAsyncTask<DataModel>().execute(this);
}
Run Code Online (Sandbox Code Playgroud)
这是ReadFileAsyncTask实施:
public class ReadFileAsyncTask<A> extends AsyncTask<I_ReadFileListener<A>, Void, A>
{
I_ReadFileListener<A> listener;
@Override
@SuppressWarnings("unchecked")
protected A doInBackground(I_ReadFileListener<A>... params)
{
listener = params[0];
Log.d("mytag", "BACKGROUND: Loading " + listener.getFilename() + " from disk");
A fileContents = (A) FileUtils.readDataFromInternalStorage(listener.getContext(), listener.getFilename());
return fileContents;
}
@Override
protected void onPostExecute(A result)
{
Log.d("myTag", "FOREGROUND: Executing onFileRetrieved listener");
listener.onFileRetrieved(result);
}
}
Run Code Online (Sandbox Code Playgroud)
捕获这个罕见故障日志:
In fetchSomeData()
... …Run Code Online (Sandbox Code Playgroud) public class Account {
String account;
double balance;
Account(String account, double balance) {
this.account = account;
this.balance = balance;
}
}
public class AccountTest {
public static void main(String[] args) {
Account a1 = new Account("Sandy", 1000);
Account a2 = new Account("Sandy", 1000);
System.out.println(a1.equals(a2));
}
}
Run Code Online (Sandbox Code Playgroud)
当我执行它显示"false"但对象包含变量中的相同数据时.解释.
这是我来自 Angular 的代码(带有重命名的方法):
我有一个函数接口/契约
type IAutocomlete = (
term: string,
selectedIds?: string[]
) => Observable<TableFilterQueryResponse[]>;
Run Code Online (Sandbox Code Playgroud)
这是我将来要注入到我的组件中的草稿服务。我会有更多类似实现的方法。
export class SuperCleanService {
constructor(
private dataController: DataController,
private serviceController: ServiceController
) {}
.....
private searchAs$: IAutocomlete = (term, selectedIds) => {
return this.dataController
.service1GET(term, selectedIds)
.pipe(
map((res) =>
res.map((a) => ({
viewValue: a.name,
value: a.id
}))
)
);
};
private searchB$: IAutocomlete = (term, selectedIds) => {
return this.serviceController
.service1(term, selectedIds)
.pipe(
map((res) =>
res.map((a) => ({
viewValue: a.id,
value: a.id
}))
) …Run Code Online (Sandbox Code Playgroud) 我已经获得了一个xml字符串,我需要通过解析器.它目前因为非法的xml字符而抱怨.很简单的例子:
<someXml>this & that</someXml>
Run Code Online (Sandbox Code Playgroud)
我知道解决方案是替换&为&,但我没有生成XML,因此无法控制值.
简单的字符串替换不是正确的方法,因为'&'在XML中具有特殊含义,并且全局替换'&'与'&' 会破坏预期的特殊含义.有没有一个解决方案来获取一个完整的xml文档并"修复"它以便'&'成为'&',但只是在预定的位置?我可以安全地将'&'替换为'& '(注意两边的空格)?
我的对象-从Log.d("FormattedDate",Object.getDOB())返回我;
if (!Object.getDOB().matches("[^-]*")) {
txtDOB.setText(Object.getDOB());
} else {
txtDOB.setText("-");
}
Run Code Online (Sandbox Code Playgroud)
我正在检查我的Object.getDOB()是否匹配-,然后显示emptry字符串,但此regExp不起作用.