我今天换了讲师,他说我用了一个奇怪的代码.(他说最好使用.equals,当我问为什么时,他回答"因为它是!")
所以这是一个例子:
if (o1.equals(o2))
{
System.out.println("Both integer objects are the same");
}
Run Code Online (Sandbox Code Playgroud)
而不是我习惯的:
if (o1 == o2)
{
System.out.println("Both integer objects are the same");
}
Run Code Online (Sandbox Code Playgroud)
这两者之间有什么区别.为什么他的方式(使用.equals)更好?
通过快速搜索找到了这个,但我无法理解这个答案:
这是关于如何使用模拟对象对Java类进行单元测试的一般问题.
我可以用这个例子总结我的问题.
假设我有一个名为MyInterface.java的接口和一个不覆盖equals()的"TwoString"对象
"TwoString.java"
private String string1;
private String string2;
public TwoString(String string1, String string2) {
this.string1 = string1;
this.string2 = string2;
}
...getters..setters..
Run Code Online (Sandbox Code Playgroud)
"MyInterface.java"
void callMe(TwoString twoString);
Run Code Online (Sandbox Code Playgroud)
然后我有"MyClass.java"对象.它的构造函数接受MyInterface的具体实现.
MyClass methodToTest()包含以某种方式创建TwoString对象的逻辑.假设它将被创建为
new TwoString("a","b")
Run Code Online (Sandbox Code Playgroud)
因此,当调用methodToTest()时,它会创建这个将传递给接口方法callMe(TwoString twoString)的TwoString对象.
我基本上想要模拟界面.使用此mock创建一个MyClass对象.然后验证是否使用TwoString的特定实例调用了mock方法.
我正在使用EasyMock,这是一些java代码
"MyClassTest.java"
public void test() throws Exception {
MyInterface myInterfaceMock = createMock(MyInterface.class);
MyClass myClass = new MyClass(myInterfaceMock);
myInterfaceMock.callMe(new TwoString("a","b")); <--- fails here
expectLastCall();
replay(myInterfaceMock);
myClass.methodToTest();
verify(myInterfaceMock);
Run Code Online (Sandbox Code Playgroud)
这就是问题所在.我期待在调用中的TwoString对象
myInterfaceMock.callMe(new TwoString("a","b"));
Run Code Online (Sandbox Code Playgroud)
与MyClass.methodToTest()中生成的不同,因为TwoString.java不会覆盖equals.
我可以跳过TwoString实例上的问题
myInterfaceMock.callMe((TwoString)anyObject());
Run Code Online (Sandbox Code Playgroud)
但我想确保使用TwoString的特定实例调用接口方法,该实例包含"a"作为string1而"b"作为string2.
在这种情况下,TwoString对象非常简单,并且很容易覆盖equals方法 - 但是如果我需要检查更复杂的对象该怎么办.
谢谢
我将尝试使用此示例使其更具可读性
public …Run Code Online (Sandbox Code Playgroud) 我需要创建一个包含许多不同频率音调的声音.有没有办法在C#中做到这一点?
到目前为止,我见过的唯一的音调生成方法涉及console.beep,它可以工作,但仅适用于纯音(单频).
我有很多当地的资源文件
我想添加另一种语言,我不想浏览所有文件夹并添加SomeControl.ascx.de.resx文件,然后必须重新编译整个思考.
我想使用附属程序集并将所有文件嵌入到MyWebPage.de.dll之类的内容中
这在VS2003版本中可用于全局资源,但我不确定我可以在VS2008版本中为本地资源执行此操作吗?
我正在使用以下语法访问资源:
<asp:label id="lblSomething" runat="server" meta:resourcekey="labelFirstName"/>
Run Code Online (Sandbox Code Playgroud) 我在我的代码中使用依赖注入(使用Ninject),并且认为我做得很好,直到遇到由于误解DI容器适合代码的地方而导致的性能问题.似乎有很多关于如何使用DI框架的信息,但没有太多关于不使用它们的地方或如何最好地使用它们(至少我能找到)
我以为我会写出我认为最好的做法,看看其他人是否同意我以及人们可以提出的其他最佳做法.
我想把设施放在显示用户选择的两个地方之间的距离.
是否有可用的示例源代码/服务?
提前致谢.
我正在使用XMLSerializer来序列化包含通用列表的对象
List <ChildBase> Children {get;set}
问题是每个元素ChildBase实际上都是抽象类.当我尝试反序列化时,我得到一个invalidOperationException
有没有办法可以将XMLSerializer与派生对象一起使用?谢谢.
Q1.什么是Java中的condVar?如果我看到下面的代码,条件变量是否必须在' mutex.acquire() '和' mutex.release() '块中?
public void put(Object x) throws InterruptedException {
mutex.acquire();
try {
while (count == array.length)
notFull.await();
array[putPtr] = x;
putPtr = (putPtr + 1) % array.length;
++count;
notEmpty.signal();
}
finally {
mutex.release();
}
}
Run Code Online (Sandbox Code Playgroud)
我有三个线程myThreadA,myThreadB,myThreadC运行,调用相同的函数commonActivity(),触发函数myWorkReport(),例如
public void myWorkReport(){
mutexMyWork.acquire();
try{
while(runMyWork){
doWork();
conditionMyWork.timedwait(sleepMyWork);
}
}
finally{
mutexMyWork.release()
}
}
public void commonActivity(){
try{
conditionMyWork.signal();
}finally{
//cleanup
}
}
public void myThreadA(){
mutexA.acquire();
try{
while(runningA){ //runningA …Run Code Online (Sandbox Code Playgroud) 我一直在努力让Eclipse像vim缩进那样格式化我的php数组.
日食的作用(按CTRL + SHIFT + F)
<?php
$array = array(
'key1' => 'value1',
'key2' => array(
'child_key1' => 'child_value1',
'child_key2' => 'child_value2',
),
);
Run Code Online (Sandbox Code Playgroud)
vim做什么(按键:gg = G)
<?php
$array = array(
'key1' => 'value1',
'key2' => array(
'child_key1' => 'child_value1',
'child_key2' => 'child_value2',
),
);
Run Code Online (Sandbox Code Playgroud)
我已经尝试查看首选项> PHP>代码样式>格式化程序和首选项> PHP>编辑器>模板,但没有找到任何东西.
提前致谢.
克旱
如果没有找到对象,有没有办法让下面的代码返回null?
var news = (from c in childs
where c.Name.ToLower().Contains("folder")
select c).First();
Run Code Online (Sandbox Code Playgroud) java ×3
c# ×2
arrays ×1
asp.net ×1
audio ×1
beep ×1
distance ×1
easymock ×1
eclipse-pdt ×1
equals ×1
indentation ×1
iphone ×1
linq ×1
localization ×1
location ×1
mocking ×1
php ×1
testing ×1
unit-testing ×1
vim ×1