我正在开发一个测试类,其中一个特定测试需要实际实现我正在模拟的服务类的方法。所以我想,为什么不在@SpyBean我@MockBean需要的地方使用而不是使用实际的实现(不必做任何事情)并在我需要的地方使用模拟的实现(需要编写一行来设置模拟的方法) 。
我发现了这篇很棒且非常详细的博客文章,解释了如何实现这一点,“@SpyBean 来救援”部分。
唯一的问题是它不起作用,使用了真正的实现并且这些测试成功了,但是模拟的方法没有启动。我正在使用 Mockito 2.21.0 和 Spring Framework 5.1.0。现在我为此目的使用单独的测试类,但我想弄清楚如何以正确的方式做到这一点。
我所做的事情与此博客上的示例几乎完全相同:
@SpringBootTest(classes = TestclassAA.class)
class TestclassAA {
@SpyBean
private XXService xxService;
private ClassUsingXXService testee;
@Test
void test1 {
// ..
// use mocked implementation of save() -> does not work, real method called
doReturn(new XXRequestModel()).when(xxService).save(any(XXModel.class));
var result = testee.doSomething();
//..
}
@Test
void test2 {
// ..
// use actual implementation of save() -> works, real method called
var result = testee.doSomething();
//.. …Run Code Online (Sandbox Code Playgroud) 所以我正在设置一个新的构建管道,它非常复杂,它是多阶段的,并且阶段内有多项作业。
但我遇到了问题,因为当我尝试依靠在同一代理工作文件夹中执行的一个阶段的第二个和第三个作业来保存某些任务时。当然,这实际上并不起作用。它实际上有时有效,但有时无效。我希望不同的作业总是在与之前的作业相同的文件夹中运行,或者从不运行,但有时不会。
无论如何,所以我想知道是否有一种方法可以将整个阶段或管道限制到单个工作目录。有人有什么想法吗?谢谢!!!
所以我正在研究一堆管道,并且我已经使用 yml 模板设置了所有内容。然而,我很难在模板步骤中扩展受保护的变量。我尝试通过正常方式传递受保护的变量,但它们似乎没有得到扩展。然后我尝试使用变量组,据说我可以直接在模板内部引用它。我说据说是因为微软在他们的网站上这么说https://learn.microsoft.com/en-us/azure/devops/pipelines/library/variable-groups?view=azure-devops&tabs=yaml:
“您还可以在模板中引用变量组。在模板variables.yml中,引用了my-variable-group组。变量组中包含一个名为myhello的变量。”
variables:
- group: my-variable-group
Run Code Online (Sandbox Code Playgroud)
但是,每当我variables在模板代码中包含一个部分时,Azure DevOps 会在运行管道之前解析 yml 时立即抱怨它。它会输出以下消息:
/ymls/my-template@my-repo(行:1,列:1):意外值“变量”
我不坚持使用变量组,我只是想在我的 yml 模板中扩展受保护的变量。有人知道该怎么做吗???
非常感谢任何帮助!
azure-devops azure-pipelines azure-pipelines-tasks azure-pipelines-yaml
我不知道如何在 bash 中使用简单的 if/elif/else 结构。我无法相信像这样微不足道的事情怎么会如此不直观和困难。我已经花了相当多的时间摆弄它。我想做的是这样的:
aaa="xxx"
if [[ $aaa -eq "bbb" ]]; then
echo "bbb"
elif [[ $aaa -eq "ccc" ]]; then
echo "ccc"
else
echo "something else"
fi
Run Code Online (Sandbox Code Playgroud)
我已经尝试过使用单个[、两个、with [[、((with==而不是-eq,我真的不是 Linux 人员,并且对语法非常困惑,我见过关于 if 条件的各种不同语法。bbb无论值是什么,它总是打印aaa。有人可以向我解释一下如何做到这一点才能起作用吗?
我正在尝试删除 Jenkins 构建中生成的源的特定自定义文件夹,但无法找出使用 Jenkinsfile 执行此操作的正确方法。
到目前为止,这是我尝试过的:
dir('target\generated-sources\something') {
deleteDir()
}
dir(???)
Run Code Online (Sandbox Code Playgroud)
我的问题是,我无法弄清楚如何向后导航,我找不到关于如何执行此操作的结论性文档......
我之前也尝试过记住 PWD,然后导航回旧的 PWD,但我也不知道该怎么做。
另一种方法是使用 cmd 或 bat 立即删除它,如下所示:
cmd rmdir target/generated-sources/something
Run Code Online (Sandbox Code Playgroud)
但现在我陷入了报价地狱。以前一定有人做过类似的事情,我也不熟悉 Groovy 语言,也不熟悉编辑 Jenkinsfiles。有人知道吗?
我遇到了SelectMany表达式的一个问题,我无法解决这个问题.
考虑一下:我有这个类的对象的集合
class Tag
{
string DisplayText { get; set; }
string Key { get; set; }
int Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试获取所有显示文本(实际上是更复杂表达式的一部分):
var texts = AvailableTags.SelectMany(t => t.DisplayText);
Run Code Online (Sandbox Code Playgroud)
现在为什么这会给我一个IEnumerable<char>而不是一个IEnumerable<string>??? 我错过了什么吗?