在 android 应用程序中使用测试数据
Using test data in android application
目前我正在开发 android 应用程序。此应用程序使用的数据由网络服务器提供。现在我想测试应用程序并使用测试数据对其进行一些尝试,导致来自服务器的真实数据动态变化,我并不总是能够测试特定功能或查看特定事物。我想到的两个选项是:
将测试数据存储在本地数据库/文件中。添加一个全局变量,如 boolean useTestData 并更改 Web 服务器连接器,以便它们在 useTestData 设置为 true 的情况下不联系 Web 服务器。缺点是,我必须用代码修改所有连接器,这不会在已发布的应用程序中使用。
实施第二个 Web 服务器 API 用于测试目的,它将仅提供我需要的静态测试数据。如果全局变量设置为 true,将访问测试 API。
我认为第二种方式是更好的选择。也许还有其他替代方法可以这样做?你怎么看这个?
提前致谢。
我在这里看到的最好方法是进行依赖注入。你的建议有什么问题(简要):
您将破坏连接器的逻辑。连接器不得依赖于您的测试。
您的想法是正确的,但是如果您失去连接或服务器出现故障,您会怎么做。这种方法使您的测试有点不稳定。测试结果将取决于服务器的状态和测试 运行 的计算机的网络连接,也可能取决于其他因素。那是错的。如果你的代码写得很好,测试必须总是成功,我的意思是不管其他任何代码。
所以我建议从你的连接器中抽象出来。
public interface IConnector {
// e.g.
public JSONObject getData(String what);
}
public class Connector implements IConnector {
public JSONObject getData(String what) {
// actual implementation that is already written
// here you make requests to server and so forth
}
}
// mock implementation of your api
public class TestConnector implements IConnector {
public JSONObject getData(String what) {
// predictable behaviour without requests to server
}
}
public class MyActivity extends Activity {
public IConnector connector = new Connector();
/**
* This method substitutes implementation of connector.
* Use this for testing purposes.
*/
public void setConnector(IConnector impl) {
connector = impl;
}
//rest of the code...
}
然后您将在测试中获得可预测和确定性的行为,而无需对代码进行大量更改。
顺便说一句,我听说了 Dagger。这是用于依赖注入的库,在这种情况下应该有所帮助。但是我没有时间去尝试,所以不能说出确切的信息。
希望这对您有所帮助。
目前我正在开发 android 应用程序。此应用程序使用的数据由网络服务器提供。现在我想测试应用程序并使用测试数据对其进行一些尝试,导致来自服务器的真实数据动态变化,我并不总是能够测试特定功能或查看特定事物。我想到的两个选项是:
将测试数据存储在本地数据库/文件中。添加一个全局变量,如 boolean useTestData 并更改 Web 服务器连接器,以便它们在 useTestData 设置为 true 的情况下不联系 Web 服务器。缺点是,我必须用代码修改所有连接器,这不会在已发布的应用程序中使用。
实施第二个 Web 服务器 API 用于测试目的,它将仅提供我需要的静态测试数据。如果全局变量设置为 true,将访问测试 API。
我认为第二种方式是更好的选择。也许还有其他替代方法可以这样做?你怎么看这个?
提前致谢。
我在这里看到的最好方法是进行依赖注入。你的建议有什么问题(简要):
您将破坏连接器的逻辑。连接器不得依赖于您的测试。
您的想法是正确的,但是如果您失去连接或服务器出现故障,您会怎么做。这种方法使您的测试有点不稳定。测试结果将取决于服务器的状态和测试 运行 的计算机的网络连接,也可能取决于其他因素。那是错的。如果你的代码写得很好,测试必须总是成功,我的意思是不管其他任何代码。
所以我建议从你的连接器中抽象出来。
public interface IConnector {
// e.g.
public JSONObject getData(String what);
}
public class Connector implements IConnector {
public JSONObject getData(String what) {
// actual implementation that is already written
// here you make requests to server and so forth
}
}
// mock implementation of your api
public class TestConnector implements IConnector {
public JSONObject getData(String what) {
// predictable behaviour without requests to server
}
}
public class MyActivity extends Activity {
public IConnector connector = new Connector();
/**
* This method substitutes implementation of connector.
* Use this for testing purposes.
*/
public void setConnector(IConnector impl) {
connector = impl;
}
//rest of the code...
}
然后您将在测试中获得可预测和确定性的行为,而无需对代码进行大量更改。
顺便说一句,我听说了 Dagger。这是用于依赖注入的库,在这种情况下应该有所帮助。但是我没有时间去尝试,所以不能说出确切的信息。
希望这对您有所帮助。