JMockit:如何在注射剂上设置属性?

时间:2015-10-08 21:02:12

标签: java jmockit

请考虑以下代码:

@Tested
CodeToTest codeToTest;

@Injectable
Injected injected;

@Test
public void test() {
  new Expectations() {{ ... }}
  assertThat(codeToTest.memberVariable).isEqualTo("x");
}

//

public class CodeToTest { public CodeToTest(Injected injected) { memberVariable = injected.getProperty("x") } }

我想测试CodeToTest。 CodeToTest需要注入注入其构造函数。如何设置一个属性,例如inject.setProperty(" x"),以便它可以在CodeToTest中访问?

1 个答案:

答案 0 :(得分:1)

手头的测试应该涵盖public class Bar { public int getValue() { return 8675309; } } public class Foo { public String field = null; public Foo(Bar b) { this.field = "" + b.getValue(); } public String getField() { return this.field; } public char getFirstChar() { return getField().charAt(0); } } 的特定方法;构造函数应该像测试一样有自己的测试。因此,例如,如果构造函数根据传入的内容设置字段,如下所示:

String

在这里,我根据传递给构造函数的int中的Bar设置getFirstChar()字段。我希望对@Tested Foo foo; @Injectable Bar bar; @Test public void test() throws Exception { // ... } 方法进行单元测试...

field

现在,正如您所指出的,在这种情况下,我test()已经在field开始之前设置了@Test public void test() throws Exception { new Expectations(foo) {{ foo.getField(); result = "24601"; }}; char c = foo.getFirstChar(); assertThat(c, is('2')); } 。所以我在这里有两个选择:首先,因为我基于其getter取出Deencapsulation,所以我可以部分模拟正在测试的类:

@Test
public void test() throws Exception {
    Deencapsulation.setField(foo, "field", "24601");

    char c = foo.getFirstChar();

    assertThat(c, is('2'));
}

或者,如果您不想这样做或者您正在进行直接字段访问而不是通过getter,您可以使用@Test public void testConstructor() throws Exception { new Expectations() {{ bar.getValue(); result = 24601; }}; Foo foo2 = new Foo(bar); String fieldValue = foo2.getField(); // or use Deencapsulation assertThat(fieldValue, is("24601")); } (JMockit的一部分)来设置内部字段,然后测试:< / p>

        NSError *error = nil;
        NSString *JsonString = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];//NSASCIIStringEncoding to work round invalid special charcter
        NSData *objectData = [JsonString dataUsingEncoding:NSUTF8StringEncoding];
        NSDictionary *responseObject = [NSJSONSerialization JSONObjectWithData:objectData
                                                                       options:NSJSONReadingMutableContainers
                                                                         error:&error];

当然,我会分别测试我的构造函数:

{{1}}

希望这有帮助,祝你好运!