如何防止一个方法被多次调用
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();
}
}
现在,如果我 运行 T1
和 T2
作为测试套件的一部分,它将 运行 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;
}
}
假设我有这些方法
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();
}
}
现在,如果我 运行 T1
和 T2
作为测试套件的一部分,它将 运行 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;
}
}