如何防止一个方法被多次调用

How do I prevent a method from being called more than once

假设我有这些方法

public class AuthProvider {
    protected AWSCredentials obtainAuth() {
        AWSCredentials credentials = new BasicAWSCredentials("key1", "");
        return credentials;
    }
}

public class Uploader extends AuthProvider {
    public void uploadFile() {
        obtainAuth();
        //code to upload file
    }
}

然后我TestNg测试class如下

public class T1 {
    @Test
    public void runTest1() {
        Uploader uploader = new Uploader();
        uploader.uploadFile();
    }
}

public class T2 {
    @Test
    public void runTest1() {
        Uploader uploader = new Uploader();
        uploader.uploadFile();
    }
}

现在,如果我 运行 T1T2 作为测试套件的一部分,它将 运行 obtainAuth() 方法两次(一次在 T1 和一次 T2)。因为我运行将这两个测试作为同一个套件的一部分,所以它应该只运行obtainAuth()方法并将返回值AWSCredentials存储在[=20中=] 方式。

我尝试通过在 Uploader class 中声明静态 class 级别字段以 static 的方式实例化 obtainAuth()。但它没有用。

基本上你添加了一个抽象。是什么阻止你检查你的 AuthProvider 是否已经完成它的工作?

换句话说:修改您的方法以允许多次调用;但只有第一个做某事;另一个是空操作:或者更简单:

public class AuthProvider {
  private static final AWSCredentials credentials = new BasicAWSCredentials("key1", "");

  protected AWSCredentials obtainAuth() {
    return credentials;
  }

但是,什么会阻碍将整个事情变成静态...

你为什么不这样做

public class AuthProvider {
    private static AWSCredentials credentials = new BasicAWSCredentials("key1", "");
    protected AWSCredentials obtainAuth() {
        return credentials;
    }
}