类org.junit.runner.Request源码实例Demo

下面列出了怎么用org.junit.runner.Request的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: bazel   文件: JUnit4TestModelBuilderTest.java
@Test
public void testCreateModel_simpleSuite() throws Exception {
  Class<?> suiteClass = SampleSuite.class;
  Request request = Request.classWithoutSuiteMethod(suiteClass);
  String suiteClassName = suiteClass.getCanonicalName();
  JUnit4TestModelBuilder modelBuilder = builder(
      request, suiteClassName, stubShardingEnvironment, null, xmlResultWriter);

  Description topSuite = request.getRunner().getDescription();
  Description innerSuite = topSuite.getChildren().get(0);
  Description testOne = innerSuite.getChildren().get(0);

  TestSuiteModel model = modelBuilder.get();
  TestNode topSuiteNode = Iterables.getOnlyElement(model.getTopLevelTestSuites());
  assertThat(topSuiteNode.getDescription()).isEqualTo(topSuite);
  TestNode innerSuiteNode = Iterables.getOnlyElement(topSuiteNode.getChildren());
  assertThat(innerSuiteNode.getDescription()).isEqualTo(innerSuite);
  TestNode testOneNode = Iterables.getOnlyElement(innerSuiteNode.getChildren());
  assertThat(testOneNode.getDescription()).isEqualTo(testOne);
  assertThat(testOneNode.getChildren()).isEmpty();
  assertThat(model.getNumTestCases()).isEqualTo(1);
}
 
源代码2 项目: bazel   文件: JUnit4RunnerFactory.java
public JUnit4RunnerFactory(
    Supplier<Request> requestSupplier,
    Supplier<CancellableRequestFactory> requestFactorySupplier,
    Supplier<Supplier<TestSuiteModel>> modelSupplierSupplier,
    Supplier<PrintStream> testRunnerOutSupplier,
    Supplier<JUnit4Config> configSupplier,
    Supplier<Set<RunListener>> runListenersSupplier,
    Supplier<Set<JUnit4Runner.Initializer>> initializersSupplier) {
  assert requestSupplier != null;
  this.requestSupplier = requestSupplier;
  assert requestFactorySupplier != null;
  this.requestFactorySupplier = requestFactorySupplier;
  assert modelSupplierSupplier != null;
  this.modelSupplierSupplier = modelSupplierSupplier;
  assert testRunnerOutSupplier != null;
  this.testRunnerOutSupplier = testRunnerOutSupplier;
  assert configSupplier != null;
  this.configSupplier = configSupplier;
  assert runListenersSupplier != null;
  this.runListenersSupplier = runListenersSupplier;
  assert initializersSupplier != null;
  this.initializersSupplier = initializersSupplier;
}
 
源代码3 项目: android-test   文件: TestRequestBuilderTest.java
/**
 * Verify that a JUnit 3 suite method that returns a TestCase is not executed when skipExecution =
 * true.
 */
@Test
public void testSkipExecution_JUnit3SuiteMethod_ReturnsTestCase() {
  Request request =
      builder
          .setSkipExecution(true)
          .addTestClass(JUnit3SuiteMethod_ReturnsTestCase.class.getName())
          .build();
  JUnitCore testRunner = new JUnitCore();
  // Differs from standard JUnit behavior; a suite() method can return any implementation of
  // junit.framework.Test not just TestSuite.
  ensureAllTestsFailed(
      testRunner.run(request),
      1,
      JUnit3SuiteMethod_ReturnsTestCase.class.getName() + "#suite() did not return a TestSuite");
}
 
源代码4 项目: bazel   文件: CancellableRequestFactoryTest.java
@Test
public void testFailingRun() {
  final AtomicBoolean testRan = new AtomicBoolean(false);
  final RuntimeException expectedFailure = new RuntimeException();

  // A runner that should run its test
  FakeRunner runner = new FakeRunner("shouldRun", new Runnable() {
    @Override
    public void run() {
      testRan.set(true);
      throw expectedFailure;
    }
  });

  Request request = cancellableRequestFactory.createRequest(Request.runner(runner));
  JUnitCore core = new JUnitCore();
  Result result = core.run(request);

  assertThat(testRan.get()).isTrue();
  assertThat(result.getRunCount()).isEqualTo(1);
  assertThat(result.getFailureCount()).isEqualTo(1);
  assertThat(result.getFailures().get(0).getException()).isSameInstanceAs(expectedFailure);
}
 
源代码5 项目: bazel   文件: JUnit4RunnerFactory.java
public static Factory<JUnit4Runner> create(
    Supplier<Request> requestSupplier,
    Supplier<CancellableRequestFactory> requestFactorySupplier,
    Supplier<Supplier<TestSuiteModel>> modelSupplierSupplier,
    Supplier<PrintStream> testRunnerOutSupplier,
    Supplier<JUnit4Config> configSupplier,
    Supplier<Set<RunListener>> runListenersSupplier,
    Supplier<Set<JUnit4Runner.Initializer>> initializersSupplier) {
  return new JUnit4RunnerFactory(
      requestSupplier,
      requestFactorySupplier,
      modelSupplierSupplier,
      testRunnerOutSupplier,
      configSupplier,
      runListenersSupplier,
      initializersSupplier);
}
 
源代码6 项目: android-test   文件: TestExecutor.java
/** Execute the tests */
public Bundle execute(Request request) {
  Bundle resultBundle = new Bundle();
  Result junitResults = new Result();
  try {
    JUnitCore testRunner = new JUnitCore();
    setUpListeners(testRunner);
    junitResults = testRunner.run(request);
  } catch (Throwable t) {
    final String msg = "Fatal exception when running tests";
    Log.e(LOG_TAG, msg, t);
    junitResults.getFailures().add(new Failure(Description.createSuiteDescription(msg), t));
  } finally {
    ByteArrayOutputStream summaryStream = new ByteArrayOutputStream();
    // create the stream used to output summary data to the user
    PrintStream summaryWriter = new PrintStream(summaryStream);
    reportRunEnded(listeners, summaryWriter, resultBundle, junitResults);
    summaryWriter.close();
    resultBundle.putString(
        Instrumentation.REPORT_KEY_STREAMRESULT, String.format("\n%s", summaryStream.toString()));
  }
  return resultBundle;
}
 
源代码7 项目: android-test   文件: AndroidJUnitRunner.java
/** Builds a {@link Request} based on given input arguments. */
@VisibleForTesting
Request buildRequest(RunnerArgs runnerArgs, Bundle bundleArgs) {

  TestRequestBuilder builder = createTestRequestBuilder(this, bundleArgs);
  builder.addPathsToScan(runnerArgs.classpathToScan);
  if (runnerArgs.classpathToScan.isEmpty()) {
    // Only scan for tests for current apk aka testContext
    // Note that this represents a change from InstrumentationTestRunner where
    // getTargetContext().getPackageCodePath() aka app under test was also scanned
    // Only add the package classpath when no custom classpath is provided in order to
    // avoid duplicate class issues.
    builder.addPathToScan(getContext().getPackageCodePath());
  }
  builder.addFromRunnerArgs(runnerArgs);

  registerUserTracker();

  return builder.build();
}
 
源代码8 项目: io   文件: SingleJUnitTestRunner.java
/**
 * .
 * @param args .
 * @throws ClassNotFoundException .
 */
public static void main(String... args) throws ClassNotFoundException {
    int retCode = 0;
    String resultMessage = "SUCCESS";
    String[] classAndMethod = args[0].split("#");
    Request request = Request.method(Class.forName(classAndMethod[0]),
            classAndMethod[1]);

    Result result = new JUnitCore().run(request);
    if (!result.wasSuccessful()) {
        retCode = 1;
        resultMessage = "FAILURE";
    }
    System.out.println(resultMessage);
    System.exit(retCode);
}
 
源代码9 项目: bazel   文件: JUnit4TestXmlListenerTest.java
@Test
public void assumptionViolationsAreReportedAsSkippedTests() throws Exception {
  TestSuiteModelSupplier mockModelSupplier = mock(TestSuiteModelSupplier.class);
  TestSuiteModel mockModel = mock(TestSuiteModel.class);
  CancellableRequestFactory mockRequestFactory = mock(CancellableRequestFactory.class);
  OutputStream mockXmlStream = mock(OutputStream.class);
  JUnit4TestXmlListener listener = new JUnit4TestXmlListener(
      mockModelSupplier, mockRequestFactory, fakeSignalHandlers, mockXmlStream, errPrintStream);

  Request request = Request.classWithoutSuiteMethod(TestWithAssumptionViolation.class);
  Description suiteDescription = request.getRunner().getDescription();
  Description testDescription = suiteDescription.getChildren().get(0);

  when(mockModelSupplier.get()).thenReturn(mockModel);

  JUnitCore core = new JUnitCore();
  core.addListener(listener);
  core.run(request);

  assertWithMessage("no output to stderr expected").that(errStream.size()).isEqualTo(0);
  InOrder inOrder = inOrder(mockModel);
  inOrder.verify(mockModel).testSkipped(testDescription);
  inOrder.verify(mockModel).writeAsXml(mockXmlStream);
  verify(mockRequestFactory, never()).cancelRun();
}
 
源代码10 项目: android-test   文件: TestRequestBuilderTest.java
/** Test provided multiple annotations to include. */
@Test
public void testTestSizeFilter_multipleAnnotation() {
  Request request =
      builder
          .addAnnotationInclusionFilter(SmallTest.class.getName())
          .addAnnotationInclusionFilter(FlakyTest.class.getName())
          .addTestClass(SampleRunnerFilterSizeTest.class.getName())
          .addTestClass(SampleMultipleAnnotation.class.getName())
          .build();
  JUnitCore testRunner = new JUnitCore();
  Result result = testRunner.run(request);
  // expect 1 test that failed
  Assert.assertEquals(1, result.getRunCount());
  Assert.assertEquals(1, result.getFailureCount());
  Assert.assertEquals(
      "testSmallSkipped", result.getFailures().get(0).getDescription().getMethodName());
}
 
源代码11 项目: android-test   文件: TestRequestBuilderTest.java
/** Test that {@link SdkSuppress} filters tests as appropriate */
@Test
public void testSdkSuppress() throws Exception {
  MockitoAnnotations.initMocks(this);
  TestRequestBuilder b = createBuilder(mockDeviceBuild);
  when(mockDeviceBuild.getSdkVersionInt()).thenReturn(16);
  when(mockDeviceBuild.getCodeName()).thenReturn("REL");
  Request request = b.addTestClass(SampleSdkSuppress.class.getName()).build();
  JUnitCore testRunner = new JUnitCore();
  Result result = testRunner.run(request);

  Set<String> expected =
      new HashSet<>(Arrays.asList("min15", "min16", "noSdkSuppress", "max19", "min14max16"));
  Assert.assertEquals(expected.size(), result.getRunCount());
  for (Failure f : result.getFailures()) {
    assertTrue(
        "Fail! " + expected + " doesn't contain \"" + f.getMessage() + "\" ",
        expected.contains(f.getMessage()));
  }
}
 
源代码12 项目: bazel   文件: JUnit4TestXmlListenerTest.java
@Test
public void failuresAreReported() throws Exception {
  TestSuiteModelSupplier mockModelSupplier = mock(TestSuiteModelSupplier.class);
  TestSuiteModel mockModel = mock(TestSuiteModel.class);
  CancellableRequestFactory mockRequestFactory = mock(CancellableRequestFactory.class);
  OutputStream mockXmlStream = mock(OutputStream.class);
  JUnit4TestXmlListener listener = new JUnit4TestXmlListener(
      mockModelSupplier, mockRequestFactory, fakeSignalHandlers, mockXmlStream, errPrintStream);

  Request request = Request.classWithoutSuiteMethod(FailingTest.class);
  Description suiteDescription = request.getRunner().getDescription();
  Description testDescription = suiteDescription.getChildren().get(0);

  when(mockModelSupplier.get()).thenReturn(mockModel);

  JUnitCore core = new JUnitCore();
  core.addListener(listener);
  core.run(request);

  assertWithMessage("no output to stderr expected").that(errStream.size()).isEqualTo(0);
  InOrder inOrder = inOrder(mockModel);
  inOrder.verify(mockModel).testFailure(eq(testDescription), any(Throwable.class));
  inOrder.verify(mockModel).writeAsXml(mockXmlStream);
  verify(mockRequestFactory, never()).cancelRun();
}
 
源代码13 项目: bazel   文件: JUnit4TestModelBuilderTest.java
@Test
public void testCreateModel_singleTestClass() throws Exception {
  Class<?> testClass = SampleTestCaseWithTwoTests.class;
  Request request = Request.classWithoutSuiteMethod(testClass);
  String testClassName = testClass.getCanonicalName();
  JUnit4TestModelBuilder modelBuilder = builder(
      request, testClassName, stubShardingEnvironment, null, xmlResultWriter);

  Description suite = request.getRunner().getDescription();
  Description testOne = suite.getChildren().get(0);
  Description testTwo = suite.getChildren().get(1);

  TestSuiteModel model = modelBuilder.get();
  TestNode suiteNode = Iterables.getOnlyElement(model.getTopLevelTestSuites());
  assertThat(suiteNode.getDescription()).isEqualTo(suite);
  List<TestNode> testCases = suiteNode.getChildren();
  assertThat(testCases).hasSize(2);
  TestNode testOneNode = testCases.get(0);
  TestNode testTwoNode = testCases.get(1);
  assertThat(testOneNode.getDescription()).isEqualTo(testOne);
  assertThat(testTwoNode.getDescription()).isEqualTo(testTwo);
  assertThat(testOneNode.getChildren()).isEmpty();
  assertThat(testTwoNode.getChildren()).isEmpty();
  assertThat(model.getNumTestCases()).isEqualTo(2);
}
 
源代码14 项目: pushfish-android   文件: JUnitTestClassExecuter.java
private void runTestClass(String testClassName) throws ClassNotFoundException {
    final Class<?> testClass = Class.forName(testClassName, false, applicationClassLoader);
    Request request = Request.aClass(testClass);
    if (options.hasCategoryConfiguration()) {
        Transformer<Class<?>, String> transformer = new Transformer<Class<?>, String>() {
            public Class<?> transform(final String original) {
                try {
                    return applicationClassLoader.loadClass(original);
                } catch (ClassNotFoundException e) {
                    throw new InvalidUserDataException(String.format("Can't load category class [%s].", original), e);
                }
            }
        };
        request = request.filterWith(new CategoryFilter(
                CollectionUtils.collect(options.getIncludeCategories(), transformer),
                CollectionUtils.collect(options.getExcludeCategories(), transformer)
        ));
    }

    if (!options.getIncludedTests().isEmpty()) {
        request = request.filterWith(new MethodNameFilter(options.getIncludedTests()));
    }

    Runner runner = request.getRunner();
    //In case of no matching methods junit will return a ErrorReportingRunner for org.junit.runner.manipulation.Filter.class.
    //Will be fixed with adding class filters
    if (!org.junit.runner.manipulation.Filter.class.getName().equals(runner.getDescription().getDisplayName())) {
        RunNotifier notifier = new RunNotifier();
        notifier.addListener(listener);
        runner.run(notifier);
    }
}
 
源代码15 项目: android-test   文件: TestRequestBuilderTest.java
/** Verify that a JUnit 3 custom Test cannot be executed because it has no runnable methods. */
@Test
public void testNoSkipExecution_JUnit3CustomTest() throws Throwable {
  Request request = builder.addTestClass(JUnit3FailingTestSuite.class.getName()).build();
  JUnitCore testRunner = new JUnitCore();
  ensureAllTestsFailed(testRunner.run(request), 1, "No runnable methods");
}
 
List<Description> getAllDescriptions(Description description, String className) {
    final AllExceptIgnoredTestRunnerBuilder allExceptIgnoredTestRunnerBuilder = new AllExceptIgnoredTestRunnerBuilder();
    try {
        final Class<?> testClass = description.getClass().getClassLoader().loadClass(className);
        Runner runner = allExceptIgnoredTestRunnerBuilder.runnerForClass(testClass);
        if (runner == null) {
            //fall back to default runner
            runner = Request.aClass(testClass).getRunner();
        }
        final Description runnerDescription = runner.getDescription();
        return runnerDescription.getChildren();
    } catch (Throwable throwable) {
        throw new TestSuiteExecutionException(String.format("Unable to process Ignored class %s.", className), throwable);
    }
}
 
源代码17 项目: astor   文件: MethodTestRunner.java
private static void runTest(String test) {
	try {
		String[] classAndMethod = test.split("#");
		System.out.println(test);
		Request request = Request.method(Class.forName(classAndMethod[0]), classAndMethod[1]);
		JUnitCore junit = new JUnitCore();
		junit.addListener(new TextListener(System.out));
		junit.run(request);
	} catch (ClassNotFoundException e) {
		e.printStackTrace();
	}
}
 
源代码18 项目: android-test   文件: TestRequestBuilderTest.java
/**
 * Verify that a JUnit 3 custom Test cannot be executed because it has no runnable methods, even
 * when skipExecution = true.
 */
@Test
public void testSkipExecution_JUnit3CustomTest() throws Throwable {
  Request request =
      builder.setSkipExecution(true).addTestClass(JUnit3FailingTestSuite.class.getName()).build();
  JUnitCore testRunner = new JUnitCore();
  ensureAllTestsFailed(testRunner.run(request), 1, "No runnable methods");
}
 
源代码19 项目: SimFix   文件: JUnitRunner.java
/**
 * args[0] test class
 * args[1] test method (optional)
 * 
 * @param args
 */
public static void main(String[] args) {

  if (args.length < 1 || args.length > 2) {
    System.err.println("Usage: java -cp .:JUnitRunner-0.0.1-SNAPSHOT.jar:<project cp> uk.ac.shef.JUnitRunner <full test class name> [test method name]");
    System.exit(-1);
  }

  Class<?> clazz = null;
  try {
    clazz = Class.forName(args[0], false, JUnitRunner.class.getClassLoader());
  } catch (ClassNotFoundException e) {
    e.printStackTrace();
    System.exit(-1);
  }

  Request request = null;
  if (args.length == 1) {
    request = Request.aClass(clazz);
  } else if (args.length == 2) {
    request = Request.method(clazz, args[1]);
  }

  JUnitListener listener = new JUnitListener();

  JUnitCore runner = new JUnitCore();
  runner.addListener(listener);
  runner.run(request); // run test method

  System.exit(0);
}
 
private ITestReference createFilteredTest(Class<?> clazz, String testName, String[] failureNames) {
	DescriptionMatcher matcher= DescriptionMatcher.create(clazz, testName);
	SubForestFilter filter= new SubForestFilter(matcher);
	Request request= sortByFailures(Request.classWithoutSuiteMethod(clazz).filterWith(filter), failureNames);
	Runner runner= request.getRunner();
	Description description= getRootDescription(runner, matcher);
	return new HybrisJUnitTestReference(runner, description);
}
 
源代码21 项目: android-test   文件: TestRequestBuilderTest.java
/**
 * Verify that @RunWith(Suite.class) annotated test that contains a JUnit 3 suite method that
 * returns a TestSuite that contains a custom Test will execute the custom Test when skipExecution
 * = false.
 */
@Test
public void testNoSkipExecution_RunWithSuite_WithCustomTest() {
  Request request = builder.addTestClass(RunWithSuite_WithCustomTest.class.getName()).build();
  JUnitCore testRunner = new JUnitCore();
  ensureAllTestsFailed(testRunner.run(request), 1, "broken");
}
 
源代码22 项目: bazel   文件: RequestFactory.java
@Override
public Request get() {
  Request request = JUnit4RunnerBaseModule.provideRequest(suiteClassSupplier.get());
  if (request == null) {
    throw new NullPointerException();
  }
  return request;
}
 
源代码23 项目: zerocode   文件: LoadProcessor.java
private Runnable createRunnable(Class<?> testClass, String testMathod) {
    return () -> {
        LOGGER.info(Thread.currentThread().getName() + " Parallel Junit test- *Start. Time = " + now());

        Result result = (new JUnitCore()).run(Request.method(testClass, testMathod));

        LOGGER.info(Thread.currentThread().getName() + " Parallel Junit test- *  End. Time = " + now());

        if (result.wasSuccessful()) {
            passedCounter.incrementAndGet();
        } else {
            failedCounter.incrementAndGet();
        }
    };
}
 
源代码24 项目: zerocode   文件: LoadTest.java
@Test
public void testLoad_Pass() {
    ExecutorServiceRunner executorServiceRunner = new ExecutorServiceRunner("load_config_test.properties");

    final AtomicInteger passedCounter = new AtomicInteger();
    final AtomicInteger failedCounter = new AtomicInteger();

    Runnable taskSampleTest = () -> {
        System.out.println(Thread.currentThread().getName() + " JunitTestSample test- Start. Time = " + LocalDateTime.now());

        Result result = (new JUnitCore()).run(Request.method(JunitTestSample.class, "testFirstName"));

        System.out.println(Thread.currentThread().getName() + " JunitTestSample test- *Finished Time, result = " + LocalDateTime.now() + " -" + result.wasSuccessful());

        if(result.wasSuccessful()){
            passedCounter.incrementAndGet();
        } else {
            failedCounter.incrementAndGet();
        }
    };

    executorServiceRunner.addRunnable(taskSampleTest);
    executorServiceRunner.runRunnables();

    System.out.println(">>> passed count:" + passedCounter.get());
    System.out.println(">>> failed count:" + failedCounter.get());
    System.out.println(">>> Total test count:" + (failedCounter.get() + passedCounter.get()));

    assertThat(failedCounter.get(), is(0));
}
 
源代码25 项目: zerocode   文件: LoadTest.java
@Test
public void testLoad_Fail() {
    ExecutorServiceRunner executorServiceRunner = new ExecutorServiceRunner("load_config_test.properties");

    final AtomicInteger passedCounter = new AtomicInteger();
    final AtomicInteger failedCounter = new AtomicInteger();

    Runnable taskSampleTest = () -> {
        System.out.println(Thread.currentThread().getName() + " JunitTestSample test- Start. Time = " + LocalDateTime.now());

        Result result = (new JUnitCore()).run(Request.method(JunitTestSample.class, "testFirstName_fail"));

        System.out.println(Thread.currentThread().getName() + " JunitTestSample test- *Finished Time, result = " + LocalDateTime.now() + " -" + result.wasSuccessful());

        if(result.wasSuccessful()){
            passedCounter.incrementAndGet();
        } else {
            failedCounter.incrementAndGet();
        }
    };

    executorServiceRunner.addRunnable(taskSampleTest);
    executorServiceRunner.runRunnables();

    System.out.println(">>> passed count:" + passedCounter.get());
    System.out.println(">>> failed count:" + failedCounter.get());
    System.out.println(">>> Total test count:" + (failedCounter.get() + passedCounter.get()));

    assertThat(passedCounter.get(), is(0));
}
 
源代码26 项目: nopol   文件: MethodTestRunner.java
private static void runTest(String test) {
    try {
        String[] classAndMethod = test.split("#");
        System.out.println(test);
        Request request = Request.method(Class.forName(classAndMethod[0]), classAndMethod[1]);
        JUnitCore junit = new JUnitCore();
        junit.addListener(new TextListener(System.out));
        junit.run(request);
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
}
 
源代码27 项目: RDFUnit   文件: RunnerTest.java
@BeforeClass
public static void addNotifierListener() {
    notifier.addListener(mockRunListener);

    assertThat(TestRunner.beforeClassCalled).isEqualTo(0);

    Request.aClass(TestRunner.class).getRunner().run(notifier);
}
 
源代码28 项目: android-test   文件: TestRequestBuilderTest.java
/** Verify suite() methods are not ignored when method filter is used */
@Test
public void testJUnit3Suite_NotFiltered() {
  Request request =
      builder.addTestMethod(JUnit3SuiteWithTest.class.getName(), "testPass").build();
  JUnitCore testRunner = new JUnitCore();
  Result result = testRunner.run(request);
  Assert.assertEquals(3, result.getRunCount());
}
 
源代码29 项目: RDFUnit   文件: RunnerOnIgnoredClassTest.java
@Test
public void verifyTestRunnerIsNotExecuted() throws Exception {
    RunNotifier notifier = new RunNotifier();
    RunListener listener = mock(RunListener.class);
    notifier.addListener(listener);

    Request.aClass(TestRunnerIgnoredOnClassLevel.class).getRunner().run(notifier);

    verify(listener, times(1)).testIgnored(any(Description.class));

    Assertions.assertThat(TestRunnerIgnoredOnClassLevel.ignoredTestInputMethodNotCalled).isTrue();
}
 
源代码30 项目: nopol   文件: DynamicClassCompilerTest.java
@Test
public void accessProtectedMethodFromSameClassloaderAndPackage() throws ClassNotFoundException {
	String qualifiedName = "test.dynamic.compiler.HelloWorld";
	String qualifiedTestName = "test.dynamic.compiler.HelloWorldTest";
	String code = 
			"package test.dynamic.compiler;" +
			"public class HelloWorld {" +
			"	protected String message() {" +
			"		return \"Hello World!\";" +
			"	}" + 
			"}";
	String testCode = 
			"package test.dynamic.compiler;" +
			"import org.junit.Test;" +
			"import static org.junit.Assert.assertEquals;" +
			"public class HelloWorldTest {" +
			"	@Test" +
			"	public void protectedMethodTest() {" +
			"		assertEquals(\"Hello World!\", new HelloWorld().message());" +
			"	}" + 
			"}";
	Map<String, String> sources = adHocMap(asList(qualifiedName, qualifiedTestName), asList(code, testCode));
	ClassLoader loader = BytecodeClassLoaderBuilder.loaderFor(sources);
	Class<?> testClass = loader.loadClass(qualifiedTestName);
	Class<?> theClass = loader.loadClass(qualifiedName);
	assertTrue(loader == theClass.getClassLoader());
	assertTrue(loader == testClass.getClassLoader());
	JUnitCore junit = new JUnitCore();
	Request request = Request.method(testClass, "protectedMethodTest");
	Result result = junit.run(request);
	assertTrue(result.wasSuccessful());
}
 
 类所在包
 同包方法