为什么Cucumber JVM在抛出异常时不会失败步骤或步骤定义?(Why Cucumber JVM does not fail step or step definition when an exception is thrown?)
我正在使用junit作为跑步者编写cucumber jvm测试代码。 一些我如何注意到即使测试代码抛出了很多运行时异常。 报告中的步骤/步骤定义仍显示为“已通过”。
如果我记得正确,我以前使用过黄瓜jvm,并且每当有异常时它总是会失败。 但是现在,当断言失败时,我只能失败这一步。
我在这里错过了什么? 任何人都可以提供建议/提示吗?
I am writing cucumber jvm test code using junit as runner. Some how i notice that even though the test code is throwing a lot of runtime exceptions. The step/step definitions still show as 'PASSED' in report.
If i remembered correctly, i've use cucumber jvm before and it always fail the steps whenever there is an exception. But now, i can only fail the step when assertion fail.
What am i missing here? Could anyone give an advice/hint?
原文:https://stackoverflow.com/questions/50206519
最满意答案
在
MyVC
您可以使用一个convenience
init
方法来初始化let
变量。 试试这个,让我知道它是否适合你:class MyVC: UIViewController { let viewBasedParam: CustomClass convenience init() { self.init(nibName:nil, bundle:nil) self.viewBasedParam = CustomClass(self.someLabel.text)//else just initialize with empty string here and then assign actual value in viewDidLoad } }
As far as I've discovered the workaround solution may be following:
class MyVC: UIViewController { @IBOutlet var someLabel: UILabel! private var _viewBasedParam: CustomClass? = nil var viewBasedParam: CustomClass { get { return self._viewBasedParam! } // always unwrap private optional set { self._viewBasedParam = newValue } } override func viewDidLoad() { super.viewDidLoad() self.viewBasedParam = CustomClass(self.someLabel.text) } }
相关问答
更多-
非重叠对象初始化(Non overlapping object initialization)[2024-02-27]
在某种程度上,初始化程序是直接调用指定的初始化程序,还是通过类中的另一个初始化程序来调用是一种尝试。 重要的是,指定的初始化器在任何情况下都会被调用。 在你的例子中,你使用比较运算符(==)调用super,而不是分配它(=)。 你需要改变这一点: if(self == [super init]){ 要么: if((self = [super init])){ 或这个: self = [super init]; if(self != nil){ To some extent it's a matter ... -
不能在任何'SWIFT'类型的非可选值上使用可选链(cannot use optional chaining on non-optional value of type 'Any' SWIFT)[2024-01-15]
尝试这个 let jsonResult = try JSONSerialization.jsonObject(with: urlContent, options: JSONSerialization.ReadingOptions.mutableContainers) as! [String:Any] let weather = jsonResult["weather"] as! [[String : Any]] if let description = weather[0]["descr ... -
使用Swift初始化一个对象以获取Firebase上的可选值(Initialize an object to take in optional values on Firebase with Swift)[2023-11-26]
只是不要让可选属性成为守卫的一部分(这就是阻止执行完成它的原因: init?(from snapshot: DataSnapshot) { let snapshotValue = snapshot.value as? [String: Any] guard let firstName = snapshotValue?["firstName"] as? String, let lastName = snapshotValue?["lastName"] as? Strin ... -
你有2个选择: 初始化它内联 var myProp = MyClass() 将其声明为隐式解包可选: var myProp: MyClass! 并在视图控制器的任何位置初始化它 - 通常在viewDidLoad 。 这是网点常用的模式,也是少数情况下我容忍隐式解包的情况之一 You have 2 options: initialize it inline var myProp = MyClass() declare it as implicitly unwrapped optional: var my ...
-
是否有可能推迟成员初始化到构造函数体?(Is it possible to defer member initialization to the constructor body?)[2022-03-24]
当你定义一个构造函数时,你有两种方法来“初始化”属性: 初始化列表 构造函数体 如果您没有明确初始化初始化程序列表中的某个属性,它仍然会初始化(通过调用其默认构造函数)给您... 实质上: class Example { public: Example(); private: Bar mAttr; }; // You write Example::Example() {} // The compiler understands Example::Example(): mAttr() {} 如果 ... -
在MyVC您可以使用一个convenience init方法来初始化let变量。 试试这个,让我知道它是否适合你: class MyVC: UIViewController { let viewBasedParam: CustomClass convenience init() { self.init(nibName:nil, bundle:nil) self.viewBasedParam = CustomClass(self.someLabel.text)//el ...
-
为什么编译器告诉我需要解包Bool(非可选?)(Why does the compiler tell me I need to unwrap a Bool (non-optional?))[2023-04-15]
sender.titleOfSelectedItem?.isEmpty是一个可选链 ,其类型为Bool? 因为如果titleOfSelectedItem为nil它可以返回nil 。 您应该决定如何处理nil案例。 您可以将可选链与nil合并运算符组合在一起?? 安全地打开结果: // treat nil as empty let empty = sender.titleOfSelectedItem?.isEmpty ?? true 或者您可以将值与false进行比较: if sender.titleOfS ... -
无法强制解包非可选类型的值:避免“Optional()”(Cannot force unwrap value of non-optional type: Avoid “Optional()”)[2022-05-02]
你已经在if let绑定中打开了playerDic。 只需按照错误消息告诉您放下力量解开。 if let playerDic = defaults.objectForKey("Player") as? [String: Int] { lbLevel.setText(String(playerDic["level"])) } 更新抱歉刚刚看到您的更新。 因此,playerDic不是可选的,但为键返回的值是可选项。 如果您要求不在字典中的键的值,您将获得值为nil的可选项。 if let ... -
为什么可以在Swift中为可选类型分配非可选值?(Why can you assign non-optional values to optional types in Swift?)[2021-12-27]
这是选项背后的语法糖的一部分。 分配非可选值是如何将其包装在可选类型中。 由于可选项表示存在或不存在值,因此您不必执行任何特殊操作来指示除提供值之外的值的存在。 例如,在一个函数中: func gimmeSomethingMaybe() -> String? { if arc4random_uniform(10) > 7 { return "something" } else { return nil } } 想象一下,如果每次想要从能够返回nil的 ... -
是的,但只是一小部分 - 不值得考虑。 我不知道“初始化”或“正确”是什么意思。 两者都被声明为var Optionals隐式初始化为nil 。 (在Swift中, 只有 var Optionals得到了隐式初始化的这种特殊处理。)你说“我以后只能初始化它们”但实际上你以后做的不是初始化; 您只是用不同的值替换nil值。 至于“正确”,如果编译它必须是“正确的”。 但是,更广泛地说,我想我明白为什么你要延迟分配这些值直到viewDidLoad ,并且它完全正确:使用Optional可以在viewDidLoa ...