Запуск первого теста JCStress - PullRequest
0 голосов
/ 24 ноября 2018

Я новичок в JCStress и пытаюсь запустить «привет мир» для JCStress, но сталкиваюсь с некоторыми проблемами.Я думаю, что есть кое-что очевидное, что я упускаю.

Я перехожу по этой ссылке, чтобы узнать.И образцы, которые я пробую, здесь .

Я начал с шаблона проекта, созданного из следующего открытого архетипа maven:

mvn archetype:generate "-DinteractiveMode=false" "-DarchetypeGroupId=org.openjdk.jcstress" "-DarchetypeArtifactId=jcstress-java-test-archetype" "-DarchetypeVersion=0.4" "-DgroupId=org.sample" "-DartifactId=test" "-Dversion=1.0"

Я сделал mvn clean install и получил .\target\jcstress.jar.Я добавил MyConcurrencyTest, который имеет следующий код в пакете org.sample


package org.sample;

import org.openjdk.jcstress.annotations.*;
import org.openjdk.jcstress.infra.results.I_Result;


@JCStressTest
@Outcome(id = "1", expect = Expect.ACCEPTABLE_INTERESTING, desc = "One update lost: atomicity failure.")
@Outcome(id = "2", expect = Expect.ACCEPTABLE, desc = "Actors updated independently.")
@State
public class MyConcurrencyTest {

    int v;

    @Actor
    public void actor1() {
        v++;
    }

    @Actor
    public void actor2() {
        v++;
    }

    @Arbiter
    public void arbiter(I_Result r) {
        r.r1 = v;
    }

}

Ниже приведена структура моего проекта:

Project Structure

Теперь я пытаюсь запустить это с помощью этой команды (мой текущий каталог - это корневой каталог проекта, когда я выполняю эту команду)


java -cp ".\target\classes" -jar .\target\jcstress.jar -v -t org.sample.MyConcurrencyTest

Но org.sample.MyConcurrencyTest не выполняется.

(я понимаю, что если мы не укажем тесты с использованием -t <testname>, то тесты из jcstress.jar/META-INF/TestList будут подобраны.) Я думаю, что упускаю что-то очень очевидное.Может кто-нибудь помочь?

(Было бы здорово, если бы кто-то мог поделиться хорошим начальным руководством по JCStress, объясняющим его возможности и функциональные возможности)

1 Ответ

0 голосов
/ 24 ноября 2018

Ах, я понял, чего мне не хватало.

Нам нужно сделать mvn clean install, чтобы получить MyConcurrencyTest в файл META-INF/TestList.

Теперь я могу запустить

java -jar .\target\jcstress.jar -v -t org.sample.MyConcurrencyTest

и мой тест выполнен.Если я хочу выполнить все тесты, мне нужно сделать

java -jar .\target\jcstress.jar -v

Вот и все.Бинго !!

Мне просто не хватало mvn clean install, я думал, что компиляция классов из Intellij и помещение их в classpath будет работать.Но это не так.Вы должны сообщить платформе JCStress, какие тесты вам нужно выполнить, и для этого вам нужно обязательно выполнить mvn clean install.

...