gpt4 book ai didi

android - 测试 Android fragment

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:55 25 4
gpt4 key购买 nike

我在无 UI fragment 中有一个业务逻辑,我必须对其进行测试。我尝试了 2 个选项,但都失败了。

<强>1。使用 AndroidTestCase 并创建模拟 Activity 。

代码如下

@Override
protected void setUp() {
Intent i = new Intent(getTestContext(), TestActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getTestContext().startActivity(i);
}

抛出异常

Permission denied: checkComponentPermission() reqUid=10104
java.lang.SecurityException: Permission Denial: starting Intent { flg=0x10000000 cmp=com.xxx.iabsample.test/.TestActivity } from ProcessRecord{40769510 28116:com.xxx.iabsample/10070 (pid=28116, uid=10070) requires null

<强>2。将 ActivityInstrumentationTestCase2 与模拟 Activity 结合使用

代码

public class IabTest extends ActivityInstrumentationTestCase2<TestActivity> {
public IabTest() {
super("com.xxx.iabsample.test", TestActivity.class);
}
}

抛出异常

java.lang.RuntimeException: Unable to resolve activity for: Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=com.xxx.iabsample/.test.TestActivity }

它似乎试图从测试目标应用程序而不是测试应用程序启动 Activity 。

那么,测试 fragment 的正确方法是什么?

最佳答案

//Please try to use bellow code.


// activity layout main.xml
<LinearLayout
android:id="@+id/frags"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >

<ListView
android:id="@+id/number_list"
android:layout_width="250dip"
android:layout_height="match_parent" />

<fragment
android:id="@+id/the_frag"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.example.fragmenttest.TestFragment" />

</LinearLayout>

//Fragments java class.



public class TestFragment extends Fragment

{

private int nAndroids;

public TestFragment() {

}

/**
* Constructor for being created explicitly
*/
public TestFragment(int nAndroids) {
this.nAndroids = nAndroids;
}

/**
* If we are being created with saved state, restore our state
*/
@Override
public void onCreate(Bundle saved) {
super.onCreate(saved);
if (null != saved) {
nAndroids = saved.getInt("nAndroids");
}
}

/**
* Save the number of Androids to be displayed
*/
@Override
public void onSaveInstanceState(Bundle toSave) {
toSave.putInt("nAndroids", nAndroids);
}

/**
* Make a grid and fill it with n Androids
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saved) {
int n;
Context c = getActivity().getApplicationContext();
LinearLayout l = new LinearLayout(c);
for (n = 0; n < nAndroids; n++) {
ImageView i = new ImageView(c);
i.setImageResource(R.drawable.android);
l.addView(i);
TranslateAnimation a = new TranslateAnimation(-50, 30, 0, 0);
a.setDuration(1000);

l.startAnimation(a);
a.setFillAfter(true);
}
return l;
}
}

// Activity


public class FragmentTestActivity extends FragmentActivity implements OnItemClickListener {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

ListView l = (ListView) findViewById(R.id.number_list);
ArrayAdapter numbers = new ArrayAdapter<String>(getApplicationContext(),
android.R.layout.simple_list_item_1,
new String [] {
"one", "two", "three", "four", "five", "six"
});
l.setAdapter(numbers);
l.setOnItemClickListener(this);
}


/**
* Add a Fragment to our stack with n Androids in it
*/
private void stackAFragment(int nAndroids) {
Fragment f = new TestFragment(nAndroids);

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.the_frag, f);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
}

/**
* Called when a number gets clicked
*/
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
stackAFragment(position + 1);
}
}

关于android - 测试 Android fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15879733/

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