【问题标题】:How to do Unit test on a Button that jumps between activities? (android studio Junit5)如何对在活动之间跳转的按钮进行单元测试? (安卓工作室 Junit5)
【发布时间】:2021-11-21 16:33:59
【问题描述】:

作为标题,我正在使用 java 编写一个 android 应用程序, 我想在我的按钮方法上使用 Junit5 进行单元测试,如下所示:

private void GoToAbout() {
        abtBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                v.playSoundEffect(SoundEffectConstants.CLICK);
                startActivity(new Intent(MainActivity.this,About.class));
            }
        });
    }

如果用户点击按钮,他们可以从 mainActivity 跳转到 About Activity。

虽然在我的实体手机上测试时该功能运行良好, 你通常如何为这样的方法编写单元测试? (我的意思是它没有输出供我检查)

【问题讨论】:

    标签: java android android-studio unit-testing junit5


    【解决方案1】:

    我建议你学习 MVP 或任何设计模式。

    如果我的MVP应该是这样的。

    public class MainActivity extends AppCompatActivity implements MainActivityContract.View {
    
    private MainActivityContract.Presenter presenter = null;
    
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        presenter = new MainPresenter(this);
    
        abtBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               presenter.onAboutButtonClick();
            }
        });
    }
    
    @Override
    public void goToAbout() {
        abtBtn.playSoundEffect(SoundEffectConstants.CLICK);
        startActivity(new Intent(MainActivity.this,About.class));
    }}
    

    演讲者

    public class MainPresenter implements MainActivityContract.Presenter{
    
    private MainActivityContract.View view;
    
    public MainPresenter(MainActivityContract.View view){
        this.view = view;
    }
    
    @Override
    public void onAboutButtonClick() {
        view.goToAbout();
    }}
    

    合同

    public interface MainActivityContract{
    interface View{
        void goToAbout();
    }
    
    interface Presenter{
        void onAboutButtonClick();
    }}
    

    最后一个单元测试类

    public class MainTest {
    
    static MainActivityContract.View view = mock(MainActivityContract.View.class);
    
    static MainActivityContract.Presenter presenter;
    
    @BeforeAll
    public static void setup(){
        presenter = new MainPresenter(view);
    }
    
    
    @Test
    public void testAboutButtonIsClick(){
        presenter.onAboutButtonClick();
        verify(view, times(1)).goToAbout();;
    }}
    

    【讨论】:

    • 感谢您的回复,我对设计模式几乎是新手,所以我还有很多东西要学,只是想问一下,您的回复中的测试是使用mockito吗?是否检查该方法被调用了多少次?
    • 是的,mockito 检查方法“goToAbout”在调用“onAboutButtonClick”后只调用了一次,或者您可以通过简单的方式使用“verify(view).goToAbout()”。
    猜你喜欢
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    相关资源
    最近更新 更多