gpt4 book ai didi

java - Android 为实用方法编写单元测试

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:40:53 27 4
gpt4 key购买 nike

我正在为静态实用方法编写单元测试:

public static String getString(Object object, boolean prettyPrint) {
if (object == null) {
throw new NullPointerException("Cannot pass null to Utility.getString() method");
}
Gson gson;
if (prettyPrint) {
gson = new GsonBuilder().setPrettyPrinting().create();
} else {
gson = new Gson();
}
return gson.toJson(object);
}

这是单元测试:

@Test 
public void getString() throws Exception {
JokeItem item = new JokeItem("title", "joke");
String required = new Gson().toJson(item);
String actual = Utility.getString(item, false);
Assert.assertEquals(required, actual);
String required1 = "{\"joke\":\"joke\",\"title\":\"title\"}";
String actual1 = Utility.getString(item, false);
Assert.assertEquals(required1, actual1);
}

JokeItem 是一个简单的 pojo 类。我面临的问题是我不确定我的测试用例是否是测试此方法的正确方法,因为我基本上在这两种方法中使用相同的方法 gson.toJson(object)。它如果我能在测试此类功能时获得一些见解以及我的方法中的陷阱和不足之处,那将非常有帮助。

最佳答案

测试此类方法实际上非常简单——您可以创建一系列测试来调用具有特定输入的方法;然后你检查返回的是什么。喜欢:

@Test(expected=NullPointerException.class)
public testCtorWithNullStringAndTrue() {
Whatever.getString(null, true);
}
// same for false

// and then
public testSomeInput() {
assertThat(Whatever.getString("whatever", true), is("expected-json-string"));
} // same for false ...

也许您只需要这么多——正如 Marek 所指出的;你不应该启动 Gson 实现。

但是:您肯定想在您的方法中测试所有可能的路径;在您的情况下,您只是想确保为特定的固定输入返回一些预期的输出(包括所有不同类型的“无效”输入!)。

最后,关于代码质量:编写像静态方法这样的小 helper 是很诱人的;并使用 boolean 值作为参数,但是 ...这不是一个好的 OO 设计。考虑一下:

interface JsonBuilder {
String getString(Object input);
}

class SimpleBuilder implements JsonBuilder
// does what your "non-pretty print code" does

class PrettyBuilder implements JsonBuilder
// does the other thing

不用担心使用 true/false;并且紧密将该静态方法的用户与实现耦合(以后很难分开);您可以只传递 JsonBuilder 接口(interface)的对象。您的代码只需调用一个方法,无需进一步担心。

这里可能有点矫枉过正,但仍然是一种值得考虑的方法。

关于java - Android 为实用方法编写单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38910443/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com