Ins*_*ere 15 java junit unit-testing exception junit3
编辑:目前不提供JUnit 4.
嗨,您好,
我有一个关于使用JUnit进行"智能"异常测试的问题.这时,我这样做:
public void testGet() {
SoundFileManager sfm = new SoundFileManager();
// Test adding a sound file and then getting it by id and name.
try {
SoundFile addedFile = sfm.addSoundfile("E:\\Eclipse_Prj\\pSound\\data\\Adrenaline01.wav");
SoundFile sf = sfm.getSoundfile(addedFile.getID());
assertTrue(sf!=null);
System.out.println(sf.toString());
sf = sfm.getSoundfileByName("E:\\Eclipse_Prj\\pSound\\data\\Adrenaline01.wav");
assertTrue(sf!=null);
System.out.println(sf.toString());
} catch (RapsManagerException e) {
System.out.println(e.getMessage());
}
// Test get with invalid id.
try {
sfm.getSoundfile(-100);
fail("Should have raised a RapsManagerException");
} catch (RapsManagerException e) {
System.out.println(e.getMessage());
}
// Test get by name with invalid name
try {
sfm.getSoundfileByName(new String());
fail("Should have raised a RapsManagerException");
} catch (RapsManagerException e) {
System.out.println(e.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我需要为每个应该抛出异常的函数提供一个try/catch块.这似乎不是一个好方法 - 或者是否没有可能减少try/catch的使用?
ska*_*man 33
我建议你需要testGet分成多个单独的测试.各个try/catch块似乎彼此非常独立.您可能还希望将公共初始化逻辑提取到其自己的设置方法中.
完成后,您可以使用JUnit4的异常注释支持,如下所示:
public class MyTest {
private SoundManager sfm;
@Before
public void setup() {
sfm = new SoundFileManager();
}
@Test
public void getByIdAndName() {
// Test adding a sound file and then getting it by id and name.
SoundFile addedFile =
sfm.addSoundfile("E:\\Eclipse_Prj\\pSound\\data\\Adrenaline01.wav");
SoundFile sf = sfm.getSoundfile(addedFile.getID());
assertTrue(sf!=null);
System.out.println(sf.toString());
sf = sfm.getSoundfileByName("E:\\Eclipse_Prj\\pSound\\data\\Adrenaline01.wav");
assertTrue(sf!=null);
System.out.println(sf.toString());
}
@Test(expected=RapsManagerException.class)
public void getByInvalidId() {
// Test get with invalid id.
sfm.getSoundfile(-100);
}
@Test(expected=RapsManagerException.class)
public void getByInvalidName() {
// Test get with invalid id.
sfm.getSoundfileByName(new String());
}
}
Run Code Online (Sandbox Code Playgroud)
Don*_*ows 13
如果你有一个预期的异常并且你不能使用注释来捕获它,你需要捕获它并断言你已经得到了你所期望的.例如:
Throwable caught = null;
try {
somethingThatThrows();
} catch (Throwable t) {
caught = t;
}
assertNotNull(caught);
assertSame(FooException.class, caught.getClass());
Run Code Online (Sandbox Code Playgroud)
如果您可以使用注释,请执行此操作,因为它更清晰.但这并不总是可行的(例如,因为您正在测试一系列方法或因为您正在使用JUnit 3).
| 归档时间: |
|
| 查看次数: |
51269 次 |
| 最近记录: |