JUnit テストケースの実行順序

JUnit4 を使っていて、テストケースの実行順序をメソッド名によるソート@FixMethodOrderも悪くはないのですが
任意に順番を指定する良い方法はないかと探していたら、やはり自作するしかないようで
自作でも良いから簡単な方法は?と探してたらありました。(面倒くさくて他人に頼ってしまう。。)
https://sui.hateblo.jp/entry/20121003/p1
でも、ここに書いてある通りのコードを実行すると、

    @Override
    protected List<FrameworkMethod> computeTestMethods() {
        List<FrameworkMethod> list = super.computeTestMethods();
        Collections.sort(list, new Comparator<FrameworkMethod>() {

この Collections.sort で、例外発生してしまいました。
java.lang.UnsupportedOperationException
at java.base/java.util.Collections$UnmodifiableList.sort(Collections.java:1330)
at java.base/java.util.Collections.sort(Collections.java:177)

残念、せっかく書いてくださりこれは助かったと思ったのですが。。
BlockJUnit4ClassRunner の super.computeTestMethods() で取得するリストが、
Collections.unmodifiableList で生成するリストだったんですね。

これなら、UnsupportedOperationException が発生しても仕方ないです。
結構古い記事だったので、JUnit バージョンが古くて、今のバージョンではダメになったのかな。
そこで、改めて書き留めておくと。。。

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
 * Order
 */
@Retention(RetentionPolicy.RUNTIME)
public @interface Order {
    int value();
}
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
import org.junit.runners.BlockJUnit4ClassRunner;
import org.junit.runners.model.FrameworkMethod;
import org.junit.runners.model.InitializationError;
/**
 * OrderedRunner
 */
public class OrderedRunner extends BlockJUnit4ClassRunner {
    public OrderedRunner(Class<?> cls) throws InitializationError  {
        super(cls);
    }
    @Override
    protected List<FrameworkMethod> computeTestMethods() {
        List<FrameworkMethod> list = super.computeTestMethods();
        return list.stream().sorted(new Comparator<FrameworkMethod>(){
            @Override
            public int compare(FrameworkMethod f1, FrameworkMethod f2){
                Order o1 = f1.getAnnotation(Order.class);
                Order o2 = f2.getAnnotation(Order.class);
                if (o1==null || o2==null){
                    return -1;
                }
                return o1.value() - o2.value();
            }
        }).collect(Collectors.toList());
    }
}

テストプログラムは、、、

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(OrderedRunner.class)
public class SampleTest{

    @Before
    public void init() {

    }
    @Test @Order(1)
    public void atest() {

    }
    @Test @Order(2)
    public void test2() {

    }
    @Test @Order(3)
    public void test1() {

    }
}