我正在为公共(public)方法编写BDD单元测试。该方法更改了一个私有(private)属性(privatevar),所以我想编写一个expect()并确保它被正确设置。由于它是私有(private)的,我不知道如何从单元测试目标访问它。对于Objective-C,我只是添加一个扩展头文件。Swift中有类似的技巧吗?请注意,该属性还有一个带有一些代码的didSet()。 最佳答案 (请注意,Swift2添加了@testable属性,它可以使内部方法和属性可用于测试。有关更多信息,请参阅下面@JeremyP的评论。)没有。在Swi
我正在为公共(public)方法编写BDD单元测试。该方法更改了一个私有(private)属性(privatevar),所以我想编写一个expect()并确保它被正确设置。由于它是私有(private)的,我不知道如何从单元测试目标访问它。对于Objective-C,我只是添加一个扩展头文件。Swift中有类似的技巧吗?请注意,该属性还有一个带有一些代码的didSet()。 最佳答案 (请注意,Swift2添加了@testable属性,它可以使内部方法和属性可用于测试。有关更多信息,请参阅下面@JeremyP的评论。)没有。在Swi
我正在尝试测试一个类,但我对测试什么感到困惑。这是我要进行单元测试的类:classCalculatorBrain{privatevaraccumulator=0.0funcsetOperand(operand:Double){accumulator=operand}varresult:Double{returnaccumulator}privatevaroperations:Dictionary=["=":.Equals,"π":.Constant(M_PI),"e":.Constant(M_E),"±":.UnaryOperation({(op1:Double)->Doubleinr
我正在尝试测试一个类,但我对测试什么感到困惑。这是我要进行单元测试的类:classCalculatorBrain{privatevaraccumulator=0.0funcsetOperand(operand:Double){accumulator=operand}varresult:Double{returnaccumulator}privatevaroperations:Dictionary=["=":.Equals,"π":.Constant(M_PI),"e":.Constant(M_E),"±":.UnaryOperation({(op1:Double)->Doubleinr
如果标题不是完全不言自明的,下面是令我困惑的代码:publicinterfaceIFoo{}publicclassMyClass:IFoo{privateclassNestedInMyClass{}}我很惊讶这个编译没有错误。感觉我在暴露一个private类型。这不应该是违法的吗?也许您的答案只是“没有反对的规则,那为什么不可以呢?”也许同样令人惊讶的是MyClass.NestedInMyClass甚至在“范围内”。如果我删除MyClass.资格,它不会编译。(如果我将IFoo更改为通用类,它应该成为MyClass的基类,这是非法的,因为基类型必须是至少与类型本身一样易于访问。)我用V
如果标题不是完全不言自明的,下面是令我困惑的代码:publicinterfaceIFoo{}publicclassMyClass:IFoo{privateclassNestedInMyClass{}}我很惊讶这个编译没有错误。感觉我在暴露一个private类型。这不应该是违法的吗?也许您的答案只是“没有反对的规则,那为什么不可以呢?”也许同样令人惊讶的是MyClass.NestedInMyClass甚至在“范围内”。如果我删除MyClass.资格,它不会编译。(如果我将IFoo更改为通用类,它应该成为MyClass的基类,这是非法的,因为基类型必须是至少与类型本身一样易于访问。)我用V
编辑:事实证明我遗漏了一些明显的东西,但我将保留这个问题以防其他人犯同样明显的错误。感谢那些指出它的人请参阅底部的解释。是否可以对覆盖接口(interface)属性的属性进行非公共(public)设置?也许我有一个愚蠢的时刻,但在我看来,在接口(interface)中定义一个属性隐含地要求没有派生类可以为所述属性提供任何非公共(public)集。例子:interfaceIField{boolIsValid{get;}}...并且由于接口(interface)属性可能没有可访问性修饰符意味着:classField:IField{publicoverrideboolIsValid{get;
编辑:事实证明我遗漏了一些明显的东西,但我将保留这个问题以防其他人犯同样明显的错误。感谢那些指出它的人请参阅底部的解释。是否可以对覆盖接口(interface)属性的属性进行非公共(public)设置?也许我有一个愚蠢的时刻,但在我看来,在接口(interface)中定义一个属性隐含地要求没有派生类可以为所述属性提供任何非公共(public)集。例子:interfaceIField{boolIsValid{get;}}...并且由于接口(interface)属性可能没有可访问性修饰符意味着:classField:IField{publicoverrideboolIsValid{get;
是否可以获取或设置私有(private)字段?我想要获取System.Guid.c。有没有办法访问它,或者我应该只从strut复制代码并将字段公开? 最佳答案 您可以按照QuanticProgramming的建议使用反射varguid=Guid.NewGuid();varfield=typeof(Guid).GetField("_c",BindingFlags.NonPublic|BindingFlags.GetField|BindingFlags.Instance);varvalue=field.GetValue(guid);尽管
是否可以获取或设置私有(private)字段?我想要获取System.Guid.c。有没有办法访问它,或者我应该只从strut复制代码并将字段公开? 最佳答案 您可以按照QuanticProgramming的建议使用反射varguid=Guid.NewGuid();varfield=typeof(Guid).GetField("_c",BindingFlags.NonPublic|BindingFlags.GetField|BindingFlags.Instance);varvalue=field.GetValue(guid);尽管