Bug 56016 JUnitLaunchShortcut#launchConfiguration() should call DebugUITools#launch() instead of config.launch() [JUnit]
I20040324 ILaunchConfiguration#launch(String, IProgressMonitor) never performs a build prior to the launch. DebugUITools#launch(ILaunchConfiguratio, String) saves and builds the workspace according to the current preference settings.
org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/JUnitLaunchShortcut.java
if (types.length == 0) {
			MessageDialog.openInformation(getShell(), JUnitMessages.getString("LaunchTestAction.dialog.title"), JUnitMessages.getString("LaunchTestAction.message.notests")); 
		} else if (types.length > 1) {
			type= chooseType(types, mode);
		} else {
			type= types[0];
		}
		if (type != null) {
			launch(type, mode);
		}
	}
	private void launchContainer(IJavaElement container, String mode) {
		String handleIdentifier= container.getHandleIdentifier();
		ILaunchConfiguration config = findLaunchConfiguration(
			mode, 
			container, 
			handleIdentifier, 
			"",  
			"" 
		);
		if (config == null) {
			config = createConfiguration(
				container.getJavaProject(),
				container.getElementName(),
				"", 
				handleIdentifier,
				"" 
			);
		}
		launchConfiguration(mode, config);