基本上你想做的是
模拟桌面,并且无论何时向其发送浏览消息(无论使用什么 URI),它都应该抛出 IOException,而不是命中该 URI。
我很久以前就使用过 Jmock。据我所知,JMock 有一些限制,例如它不提供模拟静态方法的机制。而且我不确定在 jmock 世界中模拟你的浏览器类是多么容易。
然而,使用 jmockit 进行测试几乎是微不足道的,它支持各种花哨的模拟机制(包括静态引用、单例等)。 (我之所以提到 jmockit,是因为无论你的浏览类是什么,jmockit 都可以模拟它。)
下面是excerpt from an example from their website:
package jmockit.tutorial.domain;
import org.apache.commons.mail.*;
import jmockit.tutorial.persistence.*;
import org.junit.*;
import mockit.*;
public final class MyBusinessService_ExpectationsAPI_Test
{
@Mocked(stubOutClassInitialization = true) final Database unused = null;
@Mocked SimpleEmail anyEmail;
@Test
public void doBusinessOperationXyz() throws Exception
{
final EntityX data = new EntityX(5, "abc", "abc@xpta.net");
final EntityX existingItem = new EntityX(1, "AX5", "someone@somewhere.com");
new Expectations() {{
(1) Database.find(withSubstring("select"), any);
result = existingItem; // automatically wrapped in a list of one item
}};
new MyBusinessService(data).doBusinessOperationXyz();
(2) new Verifications() {{ Database.persist(data); }};
(4) new Verifications() {{ email.send(); times = 1; }};
}
@Test(expected = EmailException.class)
public void doBusinessOperationXyzWithInvalidEmailAddress() throws Exception
{
new Expectations() {{
(3) email.addTo((String) withNotNull()); result = new EmailException();
}};
EntityX data = new EntityX(5, "abc", "someone@somewhere.com");
new MyBusinessService(data).doBusinessOperationXyz();
}
}
上面是被测试的类,下面是专门测试上述代码的 (3) 部分的测试。我认为这与您正在尝试做的事情相似。请检查一下。
@Test(expected = EmailException.class)
public void doBusinessOperationXyzWithInvalidEmailAddress() throws Exception
{
new MockUp<Email>() {
@Mock
(3) Email addTo(String email) throws EmailException
{
assertNotNull(email);
throw new EmailException();
}
};
new MyBusinessService(data).doBusinessOperationXyz();
}
}
如果你想坚持 jmock,那很好。但是您需要向我们提供更多有关 Desktop 类及其浏览方法的信息,以便我们可以考虑在 jmock 世界中可以做些什么。