Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我正在尝试用Android对自定义对话框进行单元测试,我可以';我似乎没有举例说明_Android_Unit Testing_Dialog - Fatal编程技术网

我正在尝试用Android对自定义对话框进行单元测试,我可以';我似乎没有举例说明

我正在尝试用Android对自定义对话框进行单元测试,我可以';我似乎没有举例说明,android,unit-testing,dialog,Android,Unit Testing,Dialog,我正在对一个包含自定义对话框的应用程序进行单元测试。此对话框继承自android.app.dialog,但需要Activity的特殊子类,我们称之为CustomActivity,它提供了它所需的一些功能 我希望避免实例化测试应用程序中的一个活动,因为我已经对它们进行了测试。我是单元测试,不是黑盒测试,所以我想运行对话框中的所有公共函数。但是,如果不先实例化对话框,并且需要一个CustomActivity实例,这是不可能的 我试图创建一个CustomActivity的模拟子类,并使用它来启动对话框

我正在对一个包含自定义对话框的应用程序进行单元测试。此对话框继承自
android.app.dialog
,但需要
Activity
的特殊子类,我们称之为
CustomActivity
,它提供了它所需的一些功能

我希望避免实例化测试应用程序中的一个活动,因为我已经对它们进行了测试。我是单元测试,不是黑盒测试,所以我想运行对话框中的所有公共函数。但是,如果不先实例化对话框,并且需要一个
CustomActivity
实例,这是不可能的

我试图创建一个
CustomActivity
的模拟子类,并使用它来启动对话框,但我一直遇到同样的问题:测试应用程序没有在测试应用程序中查找活动,只是在测试应用程序中。所以我得到“无法解决活动”

我还尝试自己创建活动,而不使用
插装。launchActivity
,但这需要一个上下文,而
插装测试用例下没有上下文。如果我改用
AndroidTestCase
,则提供的上下文(通过
getContext
)只是一个
ContextWrapper
,它似乎没有包装任何上下文,所以我回到了原点。我需要先实例化活动

我在谷歌上搜索了不少,我不敢相信我是第一个需要对
对话框进行单元测试的人。在我看来,我需要类似于
ActivitiTestCase2
的东西,但需要提供必要上下文的对话框


创建我的对话框的最佳方式是什么?还有别的方法我没试过吗?有人有自定义对话框单元测试的例子吗?

这听起来像是面向对象的问题,而不是Android问题。我认为你的核心问题可能是你的类之间的紧密耦合。尝试在CustomActivity前面引入一个只公开对话框所需函数的接口,然后在测试中模拟该接口,而不是尝试创建活动本身的模拟子类。祝你好运

这听起来像是一个面向对象的问题,而不是安卓系统的问题。我认为你的核心问题可能是你的类之间的紧密耦合。尝试在CustomActivity前面引入一个只公开对话框所需函数的接口,然后在测试中模拟该接口,而不是尝试创建活动本身的模拟子类。祝你好运

这是个好建议。你真的试过这个吗?是否可以在没有活动的情况下实例化对话框?android系统中似乎已经存在一些紧密耦合。:)我试过了,我怀疑如果没有实际的活动上下文发送到对话框中,就不可能显示该对话框。这里有很多Android的魔力,我发现自己在挣扎。测试对话框真的应该这么难吗?我假设您介意实例化CustomActivity的原因是它很难处理。使用上述技术,您可能仍然需要使用活动上下文,但可以使用非常简单的活动。如果您的应用程序还没有包含一个非常简单的活动,您可以添加一个空白活动,并在测试上下文时使用它。诚然,这并不完美,但确实有效。如果有人有更好的解决方案,我也很高兴听到。你认为Android的设计中有一些与此相关的缺陷是对的。谢谢你的回复!然而,我试图将CustomActivity(一个抽象类)实例化为一个模拟子类(如上所述),我的问题是我无法以正确的方式实例化它,因为我在
InstrumentationTestCase
AndroidTestCase
中都没有必要的先决条件。我没有使用ActivityInstrumentationTestCase2的原因是我没有对活动进行单元测试,而是对对话框进行单元测试。我知道我很难,但这是一个重要的区别。一个我可能不得不放弃的…明白了。如果是我,我会在那里做出一些让步,但我当然明白你来自哪里。这是个好建议。你真的试过这个吗?是否可以在没有活动的情况下实例化对话框?android系统中似乎已经存在一些紧密耦合。:)我试过了,我怀疑如果没有实际的活动上下文发送到对话框中,就不可能显示该对话框。这里有很多Android的魔力,我发现自己在挣扎。测试对话框真的应该这么难吗?我假设您介意实例化CustomActivity的原因是它很难处理。使用上述技术,您可能仍然需要使用活动上下文,但可以使用非常简单的活动。如果您的应用程序还没有包含一个非常简单的活动,您可以添加一个空白活动,并在测试上下文时使用它。诚然,这并不完美,但确实有效。如果有人有更好的解决方案,我也很高兴听到。你认为Android的设计中有一些与此相关的缺陷是对的。谢谢你的回复!然而,我试图将CustomActivity(一个抽象类)实例化为一个模拟子类(如上所述),我的问题是我无法以正确的方式实例化它,因为我在
InstrumentationTestCase
AndroidTestCase
中都没有必要的先决条件。我没有使用ActivityInstrumentationTestCase2的原因是我没有对活动进行单元测试,而是对对话框进行单元测试。我知道我很难,但这是一个重要的区别。一个我可能不得不放弃的…明白了。如果是我,我会做一些