我正面临着Mockito junit测试的问题.我是新手,我对我面临的问题感到困惑.任何有关这方面的帮助将不胜感激.
class Activity{
public void firstMethod(){
String str = secondMethod();
}
public String secondMethod(){
String str = null;
/* some Code */
return str;
}
}
Run Code Online (Sandbox Code Playgroud)
获得例外:
*org.mockito.exceptions.misusing.NotAMockException:
Argument passed to when() is not a mock!*
Run Code Online (Sandbox Code Playgroud)
在下面的代码中
class ActivityTest(){
Activity act;
@Before
public void setup(){
act = new Activity();
}
@Test
public void testFirstMethod(){
Mockito.doReturn(Mockito.anyString()).when(act).secondMethod();
act.firstMethod();
verify(act).secondMethod();
}
}
Run Code Online (Sandbox Code Playgroud)
我知道活动不是模拟,但我不确定如何解决这个问题,因为secondMethod()同一个类中的方法.我需要编写规则,secondMethod()因为我已经完成了单元测试.组合的定义secondMethod()具有外部依赖性.我应该嘲笑存在的外部依赖关系secondMethod()并为它们编写规则而不是规则secondMethod()吗?
我发现这篇文章: Mockito Spy'ing对被单元测试的对象 然而将secondMethod()分成另一个类是没有意义的.我的方法与这个类有关.创建一个不同的测试类对我来说似乎不对.即使使用spy()模拟实际类也不是最正确的方法,正如帖子中已经解释过的那样.
我不认为我应该创建一个Activity类的模拟,因为那是我正在测试的类.我非常感谢对此的帮助和见解.
我正在使用Mockito来模拟我正在编写测试的同一个类中的方法.我已经在SO上看到了其他答案(同一类中的模拟方法),但可能是我误解了它们,因为我遇到了问题.
class Temp() {
public boolean methodA(String param) {
try {
if(methodB(param))
return true;
return false;
} catch (Exception e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的测试方法:
@Test
public void testMethodA() {
Temp temp = new Temp();
Temp spyTemp = Mockito.spy(temp);
Mockito.doReturn(true).when(spyTemp).methodB(Mockito.any());
boolean status = temp.methodA("XYZ");
Assert.assertEquals(true, status);
}
Run Code Online (Sandbox Code Playgroud)
然而,由于方法B的定义被执行,我打印出了预期.我的理解是使用spyTemp来模拟methodB的定义.然而,情况似乎并非如此.
有人可以解释我哪里出错吗?
我编写了一个使用Java流的方法,它简单地遍历对象列表并返回true/false,满足某些条件
Java方法:
boolean method(SampleObj sampleObj) {
List testList = invokeSomeMethod();
int result = testList
.parallelStream()
.filter(listObj -> (listObj.getAttr() = 1))
.count(listObj -> listObj.isAttr4());
return (result > 10);
}
Run Code Online (Sandbox Code Playgroud)
我也写了一个模拟测试用例.当我执行测试用例时,测试成功,但是我得到项目自定义错误,指出所有创建的线程都没有关闭.
我甚至尝试使用带有try-with-resources的流,而noo没有帮助.
模拟测试:
@Test
public void testSomeMethod() {
SampleObj sampleObj1 = new SampleObj(10, 20, 30, true);
SampleObj sampleObj2 = new SampleObj(10, 20, 30, true);
SampleObj sampleObj3 = new SampleObj(10, 20, 30, false);
SampleObj sampleObjTest = new SampleObj(10, 20, 30, true);
List<SampleObj> testList = new ArrayList<SampleObj>();
testList.add(sampleObj1);
testList.add(sampleObj2);
testList.add(sampleObj3);
when(mockedAttribute.invokeSomeMethod()).thenReturn(nodeList);
ClassToBeTested classTest = …Run Code Online (Sandbox Code Playgroud) 有没有办法完全自动删除SQS队列.我有一个解决方案,其中启动时的服务器创建SQS并订阅SNS主题.
然而,可能存在服务器崩溃并且不可恢复的情况.在这种情况下,我会用不同的服务器替换服务器,这将在启动时创建自己的队列.现在不再使用较早的队列了.
是否有一种方法可以让队列自动删除并明确删除它(可能就像队列在5天内保持空白,它会被自动删除或其他一些替代方案)?
我的帐户中有一个 s3 存储桶,它使用默认aws-kms密钥启用了 SSE。我希望向我的存储桶提供另一个帐户的读取权限。
我已按照以下链接提供访问权限: https://aws.amazon.com/premiumsupport/knowledge-center/cross-account-access-denied-error-s3/
我正在使用aws s3 ls <s3://bucket_name>并aws s3 cp <path to s3 object> . 下载该对象
我尝试在未启用 SSE 的情况下提供对存储桶的跨账户访问。我成功地检索了存储桶详细信息并下载了对象。但是,当我尝试从启用了 SSE 的存储桶下载对象时,出现An error occurred (AccessDenied) when calling the GetObject operation: Access Denied异常。我可以列出启用 SSE 的存储桶中的对象,但不能下载它们。
我的存储桶政策:
{
"Version": "2008-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::<Account_B_AWS_Account_Id>:role/ReadOnly"
]
},
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::<bucket-name>",
"arn:aws:s3:::<bucket-name>/*"
]
},
{
"Sid": "Allow use of the key",
"Effect": "Allow",
"Principal": { …Run Code Online (Sandbox Code Playgroud) 我正在尝试调试远程应用程序。我在服务器上启动了一个 SOCKS 代理:ssh -D 9999 主机名
然后我尝试从我的 eclipse 调试设置连接到它,其中主机名相同且端口 = 9999。
但是我得到错误:
channel 3: open failed: connect failed: Connection refused
我还更新了 eclipse 网络连接以允许 SOCKS 代理。该配置适用于同一网络中的不同主机名。
我无法解释此错误消息。有人可以帮助我出错的地方吗?我看着这个:SSH -L 连接成功,但本地主机端口转发不起作用“通道 3:打开失败:连接失败:连接被拒绝”但在我的情况下确实发现它很有用。
我在调试模式下在远程服务器上启动了我的进程,监听了一个特定的端口 4111 我确认调试端口是通过netstat -a命令打开的
谢谢
我试图在Type: AWS::Lambda::EventSourceMapping
下面的属性之一中定义值是我的片段(最新尝试):
FunctionName: #trigger the echo function previously defined
"Fn::Join": [":", [{"Fn::GetAtt" : ["LambdaName", "Arn"]}, "live" ]]
Run Code Online (Sandbox Code Playgroud)
但是,我的云形成堆栈无法部署并出现以下错误:
"StatusReason": "Template error: every Fn::Join object requires two parameters, (1) a string delimiter and (2) a list of strings to be joined or a function that returns a list of strings (such as Fn::GetAZs) to be joined."
我已经尝试了几个带有括号的变体,但是一直出现相同的错误。我在语法中缺少什么?
PS我在yaml文件中定义这个
我正在尝试用java编写单元测试。下面是我的代码片段
类 Temp { 公共 void 方法() {
return someObject.someMethod(param1, param2, param3, param4, param5);
}
}
Run Code Online (Sandbox Code Playgroud)
测试方法:
@Test
public void testMethod() {
Mokito.when(someObjectMock.someMethod(Mockito.anyString(), Mockito.anyString(), Mockito.anyInt(), Mockito.anyBoolean(),
false)). thenReturn(true);
boolean status = temp.method();
Assert.assertEquals(true, status);
}
Run Code Online (Sandbox Code Playgroud)
然而,在执行测试用例时,我遇到以下错误:
Invalid Use of argument matchers !
5 matchers expected, 4 recorded
Run Code Online (Sandbox Code Playgroud)
如果我的理解是正确的,它期望传递的所有参数都被模拟。但这不是我想要的,我希望模拟前 4 个参数,并根据第 5 个参数(true 或 false),然后指定该方法的适当返回值。
有办法解决这个问题吗?
谢谢
我希望根据使用泛型的输入从方法返回多个不同的POJO对象响应.POJO不是层次结构的一部分,即完全独立的POJO
//POJO1
class A1 implements Serializable {
// Instance variable with getter and setter
}
//POJO2
class B1 implements Serializable {
// Instance variable with getter and setter
}
class XYZ {
private ObjA objA;
private ObjB objB;
public <T>Optional<T> getResponse(String input) {
if(input.equals("A")) {
return objA.getResponse(); // This returns an optional of POJO A1 or Optional.empty()
} else {
return objB.getResponse(); // This returns an optional of POJO B1 or Optional.empty()
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是我得到了错误 Incompatible types. Required Optional<T> …
我试图在触发警报时重试某些逻辑.那可能吗.我已将警报定义如下:
local $SIG{ALRM} = sub {
if($attempt <=5) {
print "NExt attempt\n";
$attempt = $attempt + 1;
my $val = subroutine_call();
} else{
Carp::confess "Die now\n";
}
Run Code Online (Sandbox Code Playgroud)
我的代码段如下:
foreach my $x (@array)
{
eval {
alarm(2);
my $val = subroutine_call();
alarm(0);
};
print "Moving on \n";
## some code
}
Run Code Online (Sandbox Code Playgroud)
我希望在终止应用程序之前触发警报时重试调用subroutine_call最多3次.调用subrountine_call后(无论是否在触发警报后调用),都应显示print语句.
我知道一旦触发警报并且通过警报定义生成subrountine_call,代码流就会偏离,并且它不会执行print语句.我希望它表现得好像如果警报没有被触发就会有.
那可能吗?我持怀疑态度,但想知道是不是这样.
谢谢,
我对对象的流量生命周期(即创建和删除对象的时间)感兴趣。一种方法是定期扫描存储桶并明确跟踪lastModifiedTime并与之前的扫描结果进行比较以识别已删除的对象。
我正在考虑的另一个替代方案是启用 S3 事件通知。但是,通知中的数据不包含该对象的lastModifiedTime。可以eventTime用作代理吗?是否能保证事件发送的速度?就我而言,如果事件的交付延迟是可以接受的;只要eventTime不晚于modificationTime对象的时间
另外,还有其他替代方法来捕获 s3 对象的生命周期吗?
java ×6
unit-testing ×4
mockito ×3
amazon-s3 ×2
alarm ×1
amazon-iam ×1
amazon-sqs ×1
aws-lambda ×1
eclipse ×1
generics ×1
java-stream ×1
junit ×1
matcher ×1
mocking ×1
optional ×1
perl ×1
perl-module ×1
ssh ×1