我正在为项目编写单元测试,我正在以编程方式创建自定义组件。我遇到的问题是我需要传递属性的完全限定名称,并且我无法弄清楚我的项目attrs.xml
文件中包含的自定义属性的样子。
@Test
public void test_ContextAndAttributeConstructorWithActivityTest() {
Resources resources = RuntimeEnvironment.application.getResources();
ResourceLoader resourceLoader = Shadows.shadowOf(resources).getResourceLoader();
ArrayList<Attribute> attributes = new ArrayList<>();
attributes.add(new Attribute("com.example.application.view.ActivityActionButton:attr/activityName", "TestActivity.class", "com.example.application")); // this doesn't works
attributes.add(new Attribute("android:attr/text", "Example Text", "com.example.application")); // this works
RoboAttributeSet attributeSet = new RoboAttributeSet(attributes, resourceLoader);
assertEquals(2, attributeSet.getAttributeCount());
ActivityActionButton activityActionButton = new ActivityActionButton(context, attributeSet);
assertEquals("Example Text", activityActionButton.getText()); // this passes
assertEquals("TestActivity.class", activityActionButton.getActivityName()); // this fails
}
这是我的代码目前的示例,其中包名称由com.example.application
进行了模糊处理。
我瘦下来的attrs.xml
文件看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="ActivityActionButton">
<attr name="activityName" format="string" />
</declare-styleable>
</resources>
那么activityName
的完全限定名称是什么?
另外:组件确实正常运行,所以我知道我的问题属于我作为完全限定名称传递的内容。
答案 0 :(得分:0)
令人惊奇的是新的一天和咖啡可以做些什么。我能够弄清楚自定义属性的完全限定名称是什么,现在我的单元测试正在通过。
在提到我的问题时,名称为com.example.application:attr/activityName
。所以工作示例如下:
@Test
public void test_ContextAndAttributeConstructorWithActivityTest() {
Resources resources = RuntimeEnvironment.application.getResources();
ResourceLoader resourceLoader = Shadows.shadowOf(resources).getResourceLoader();
ArrayList<Attribute> attributes = new ArrayList<>();
attributes.add(new Attribute("com.example.application:attr/activityName", "TestActivity.class", "com.example.application"));
attributes.add(new Attribute("android:attr/text", "Example Text", "com.example.application"));
RoboAttributeSet attributeSet = new RoboAttributeSet(attributes, resourceLoader);
assertEquals(2, attributeSet.getAttributeCount());
ActivityActionButton activityActionButton = new ActivityActionButton(context, attributeSet);
assertEquals("Example Text", activityActionButton.getText());
assertEquals("TestActivity.class", activityActionButton.getActivityName());
}