StoryQ测试类构造函数时When无操作的更佳实践咨询
嘿,针对你在StoryQ里遇到的这个小问题——不想为When阶段单独写个空的Nothing方法,这里有几个更优雅的解决思路:
1. 尝试内联空Action(优先推荐,看版本支持)
如果你的StoryQ版本不算太旧,其实是支持直接传递空lambda表达式的,不用额外定义任何方法:
_lensShadingStory.WithScenario("Init Lens Shading plug-in") .Given(InitLensShadingPlugin) .When(() => { }) // 直接写空的Action表达式 .Then(PluginIsCreated) .Execute();
要是之前这么写报错,大概率是用了比较老的StoryQ版本,可以考虑升级到最新稳定版,这个写法最简洁直观。
2. 定义全局复用的空操作方法
如果升级版本不太方便,那可以在项目里建一个测试辅助类,把空操作方法统一放进去,避免每个测试类都重复写Nothing:
public static class StoryQTestHelpers { // 全局复用的无操作方法 public static void NoOp() { } }
之后所有需要无操作When的场景都可以直接调用:
_lensShadingStory.WithScenario("Init Lens Shading plug-in") .Given(InitLensShadingPlugin) .When(StoryQTestHelpers.NoOp) .Then(PluginIsCreated) .Execute();
这种方式能减少重复代码,维护起来也更省心。
3. 调整BDD场景的表述逻辑(可选)
既然你也提到初始化逻辑放在Given或When里影响不大,也可以换个思路调整Scenario的结构:把初始化逻辑移到When阶段,Given用空操作,这样更贴合BDD「When触发动作」的语义:
_lensShadingStory.WithScenario("Init Lens Shading plug-in") .Given(() => { }) .When(InitLensShadingPlugin) .Then(PluginIsCreated) .Execute();
这个方案只是换了一种更符合BDD表述习惯的写法,也能避免单独定义空方法的问题。
内容的提问来源于stack exchange,提问作者Gilad
相关产品推荐
相关产品推荐

