当前位置: 首页 > 知识库问答 >
问题:

noSuchMethodError:没有静态方法clearInstance()

彭霄
2023-03-14

我试图在Android Studio中运行一个测试,测试设置抛出一个java.lang.NoSuchMethodError

测试:

@RunWith(AndroidJUnit4.class)
@LargeTest
public class MusicLocalDataSourceTest {
    private Context context;
    private final static String TITLE_1 = "TITLE 1";
    private final static String ID_1 = "1";
    private final static String ARTISTIC_1 = "ARTISTIC 1";


    private DataSource<Music> mMusicDataSource;
    private StapeDatabase mDatabase;

    @Before
    public void setup() {
        context = InstrumentationRegistry.getTargetContext();
        mDatabase = Room
                .inMemoryDatabaseBuilder(context, StapeDatabase.class)
                .build();

        IEMusicDao dao = mDatabase.musicDao();

        MusicLocalDataSource.clearInstance(); // throws error
        mMusicDataSource = MusicLocalDataSource.getInstance(new SingleExecutor(), dao);
    }

    @After
    public void cleanUp() {
        mDatabase.close();
        MusicLocalDataSource.clearInstance();
    }

    @Test
    public void should_not_have_null_instance() {
        assertNotNull(mMusicDataSource);
    }
}

classe que estou testando:
class being tested:

public class MusicLocalDataSource implements IEMusicDataSource<Music> {
    private static volatile MusicLocalDataSource INSTANCE;
    private IEMusicDao musicDao;
    private AppExecutors appExecutors;

    private MusicLocalDataSource(@NonNull AppExecutors appExecutors, @NonNull IEMusicDao musicDao) {
        this.appExecutors = appExecutors;
        this.musicDao = musicDao;
    }

    public static MusicLocalDataSource getInstance(@NonNull AppExecutors appExecutors, @NonNull
                                                   IEMusicDao musicDao) {

        if (INSTANCE ==  null) {
            synchronized (MusicLocalDataSource.class) {
                if (INSTANCE == null) {
                    INSTANCE = new MusicLocalDataSource(appExecutors, musicDao);
                }
            }
        }

        return INSTANCE;
    }

    @Override
    public void findAll(@NonNull LoadDataCallback<Music> callback) {
        Runnable runnable = () -> {
          final List<Music> musics = musicDao.findAll();
          this.appExecutors.mainThread().execute(() -> {
              if (musics.isEmpty()) {
                  callback.onDataNotAvailable();
              } else {
                  callback.onDataLoaded(musics);
              }
          });
        };

        appExecutors.diskIO().execute(runnable);
    }

    @Override
    public void findById(@NonNull String dataId, @NonNull GetDataCallback<Music> callback) {
        Runnable runnable = () -> {
            final Music music = musicDao.findMusicById(dataId);

            appExecutors.mainThread().execute(() -> {
                if(music != null) {
                    callback.onDataLoaded(music);
                } else {
                    callback.onDataNotAvailable();
                }
            });
        };

        appExecutors.diskIO().execute(runnable);
    }

    @Override
    public void save(@NonNull Music data) {

    }

    @Override
    public void update(@NonNull Music data) {

    }

    @Override
    public void delete(@NonNull Music data) {

    }

    @Override
    public void delete(@NonNull String dataId) {

    }

    @Override
    public void deleteAll() {

    }

    @VisibleForTesting
    static void clearInstance() {
        INSTANCE = null;
    }
   java.lang.NoSuchMethodError: No static method clearInstance()V in class

有人知道正在发生什么,或者能给我指路?

编辑:当我在其他测试中创建一个实体的新实例时再次出现此错误,该实体在测试中是静态属性。

public class IEMusicDaoTest {
    private static final Music MUSIC = new Music("1", "title", "artistic"); // error occurred here
    private StapeDatabase mDatabase;

    @Before
    public void setUp() throws Exception {
        Context context = InstrumentationRegistry.getContext();
        mDatabase = Room.inMemoryDatabaseBuilder(context, StapeDatabase.class).build();
    }

    @After
    public void tearDown() throws Exception {
        mDatabase.close();
    }

    @Test
    public void should_have_success_in_save_music() {
        mDatabase.musicDao().save(MUSIC);

        Music loaded = mDatabase.musicDao().findMusicById(MUSIC.getId());

        assertMusic(loaded, MUSIC.getId(), MUSIC.getName(), MUSIC.getArtist());

    }

    private void assertMusic(Music loaded, String id, String name, String artist) {
        Assert.assertThat(loaded, CoreMatchers.notNullValue());
        Assert.assertThat(loaded.getId(), CoreMatchers.is(id));
        Assert.assertThat(loaded.getName(), CoreMatchers.is(name));
        Assert.assertThat(loaded.getArtist(), CoreMatchers.is(artist));
    }

共有1个答案

夏季萌
2023-03-14

通常检查引入该类方法的版本。如果该方法是在较新的版本中引入的,编译器将接受该方法,但如果在较旧的平台上运行,则在运行时将是一个bug!

 类似资料:
  • 我有一个扩展方法: 应用程序安装时没有任何错误;但是当在运行时调用该方法时,它会给我以下错误: java.lang.NoSuch方法错误:没有静态方法onClickButtonBack(Lcom/app/common_client/ui/片段 /stores/StoresClientFragment;)V类Lcom/app/common_client/公共资源/公共资源AppTypeGroupKt

  • 我想做的是简化如下。 爪哇- 我必须存储JVM(2)和全局jObject(3)。 但是在第三部分, 我总是犯这个错误。 结构 包装纸。爪哇 本地库。cpp 包装纸。cpp ** 其他Java类 包装纸。JAVA 本地库。cpp 包装纸。cpp 包装纸。JAVA native-lib.cpp 包装纸。cpp 功能A 翻译。翻译员。cpp(职能B) TfModel.java 我如何调用

  • 问题内容: 我的应用程序有一个问题,当我登录时,该应用程序崩溃并且出现错误: 我试图弄乱gradle并更改变量。这个问题似乎源于此软件包: 然后,它还引用了以下内容: 这是我的摇篮 关于如何找到纠正错误的方法有任何想法吗? 问题答案: 尝试切换到Java 8兼容性,以对某些库进行适当的除糖处理: 此外,Google JSON API可能更需要。

  • 我正在构建一个Android应用程序,在尝试读取XLSX文件时,面临一个非静态方法异常。 尝试了所有的可能性,如更新应用程序/build.gradle中的依赖关系,但没有成功。 请帮助我解决此问题。 我正在添加app.gradle文件。其他代码是使用XSSF的基本XLSX文件读取。当我试图在Spring Suite工具中运行这个java片段时,它运行正常。然而,当我将这些java片段集成到Andr

  • 我运行Android emulator并在此行“cameraProviderFuture=ProcessCameraProvider.getInstance(requireResponsibility())”处崩溃。为什么? logcat错误:java.lang.NoSuchMultiodError:没有静态方法getOrCreateInstance(Landroid/Content/Contex