如何测试实例方法是否正确修改实例变量?
鉴于课程:
class MyClass
attr_reader :ary
def initialize
@ary = []
end
def update (value)
@ary << value
end
end
我如何测试#update是否正确修改@ary?
到目前为止,我有:
describe MyClass do
before { @my_class = MyClass.new }
describe '#update' do
it 'should correctly update the value' do
expect(@my_class.update('some_value')).to #what comes next?
匹配器正在考虑评估#update的返回值,而不是@ary的值,这就是我想要的。
答案 0 :(得分:1)
这是一个简明的例子
<style name="Theme.Transparent" parent="android:Theme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
与初始代码相比的一些注释。首先,您可以依靠describe MyClass do
describe "#update" do
it "appends the argument to the array" do
subject.update(value = 'some_value')
expect(subject.ary).to eq([value])
end
end
end
。 subject
定义为
subject
好像有
described_class.new
或
describe MyClass do
subject { described_class.new }
describe "#update" do
...
end
end
基本上意味着
describe MyClass do
describe "#update" do
subject = described_class.new
end
end
如果您只想测试实例,请使用describe MyClass do
describe "#update" do
subject = MyClass.new
end
end
。不要在操作之前使用设置实例变量。
以下一行
subject
本质上是
的快捷方式subject.update(value = 'some_value')
expect(subject.ary).to eq([value])
它帮助我不写两次预期的字符串。其余的应该很容易理解。
如果相关,您可能还想测试返回值。
value = 'some_value'
subject.update(value)
expect(subject.ary).to eq([value])
答案 1 :(得分:0)
首先调用方法,然后检查boolean valid = true;
if(s1.equals("") || s2.equals("") || s3.equals("") || s4.equals("") || s5.equals("") || s6.equals("")) {
Toast.makeText(getApplicationContext(),"Enter all Details first", Toast.LENGTH_SHORT).show();
valid = false;
}
if(!s5.matches("[A-Za-z0-9]+")) {
e5.setError("Username cannot contain special characters");
valid = false;
}
if(s5.length()<6) {
e5.setError("Username must be a minimum of 6 characters.");
valid = false;
}
if(!(s3.contains("@")&& s3.contains("."))) {
e3.setError("Enter a valid Email Id");
valid = false;
}
if(!s6.equals(s7)) {
e7.setError("Passwords dont match");
valid = false;
}
if(s2.length()!=10) {
e2.setError("Please enter a valid 10 digit number");
valid = false;
}
if (valid) {
Validate v2=new Validate();
v2.store_values(s1,s2,s3,s4,s5,s6,s8);
v2.execute();
}
@ary