Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.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
Java 测试android mvp演示者_Java_Android_Mvp - Fatal编程技术网

Java 测试android mvp演示者

Java 测试android mvp演示者,java,android,mvp,Java,Android,Mvp,测试我的mvp演示者的最佳方法是什么?我读了很多教程,每一本都让我更加困惑。我刚刚开始学习测试,我想从演示者开始会更容易 我的演讲者 public class HymnPresenter implements HymnPresenterContract, HymnRepository.HymnsCallback{ private HymnRepository hymnRepository; private HymnsViewContract hymnViewContract;

测试我的mvp演示者的最佳方法是什么?我读了很多教程,每一本都让我更加困惑。我刚刚开始学习测试,我想从演示者开始会更容易

我的演讲者

public class HymnPresenter implements HymnPresenterContract, HymnRepository.HymnsCallback{

    private HymnRepository hymnRepository;
    private HymnsViewContract hymnViewContract;

    public HymnPresenter() {
    }

    /*public HymnPresenter(HymnRepository repository, HymnsViewContract viewContract) {
        this.hymnViewContract = viewContract;
        this.hymnRepository = repository.attach(this);
    }*/



    @Override
    public void addHymns(ArrayList<Hymn> hymns){
        if(hymns != null && !hymns.isEmpty()) {
            hymnRepository.addHymns(hymns);
            hymnViewContract.showLoading();
        }else{
            handleError("Can not add null hymn");
        }
    }

    @Override
    public void addHymn(Hymn hymn){
        if(hymn != null) {
            hymnViewContract.showLoading();
            hymnRepository.addHymn(hymn);
        }else{
            handleError("Can not add null hymn");
        }
    }

    @Override
    public void handleSuccess() {
        hymnViewContract.success();
        hymnViewContract.hideLoading();
    }

    @Override
    public void handleError(String error) {
        hymnViewContract.error(error);
        hymnViewContract.hideLoading();
    }
} 
所以我设法让它工作起来。谢谢大家。。。这就是我所做的

@RunWith(MockitoJUnitRunner.Silent.class)
public class HymnPresenterTest {

    @InjectMocks
    public HymnPresenter hymnPresenter;
    @Mock
    public HymnRepository hymnRepository;
    @Mock
    public HymnsViewContract hymnsViewContract;
    @Mock
    private Hymn hymn;
    ArrayList<Hymn> hymns;

    @Before
    public void setUp() throws Exception {
        hymns = new ArrayList<>();
        hymns.add(hymn);
    }

    @Test
    public void addHymn_callsRepositoryAddHymn() throws Exception {
        hymnPresenter.addHymn(hymn);
        verify(hymnRepository).addHymn(eq(hymn));
    }

    @Test
    public void addHymns_callsRepositoryAddHymns() throws Exception {
        hymnPresenter.addHymns(hymns);
        verify(hymnRepository).addHymns(eq(hymns));
    }

    @Test
    public void addHymns_callsViewContractShowLoading() throws Exception {
        hymnPresenter.addHymns(hymns);
        verify(hymnsViewContract).showLoading();
    }

    @Test
    public void addHymn_callsViewContractShowLoading() throws Exception {
        hymnPresenter.addHymn(hymn);
        verify(hymnsViewContract).showLoading();
    }

    @Test
    public void addNullHymn_callsViewContractError() throws Exception {
        hymnPresenter.addHymn(null);
        verify(hymnsViewContract).error(anyString());
        verify(hymnsViewContract).hideLoading();
    }

    @Test
    public void addEmptyHymnList_callsViewContractError() throws Exception {
        ArrayList<Hymn> list = new ArrayList<>();
        hymnPresenter.addHymns(list);
        verify(hymnsViewContract).error(anyString());
        verify(hymnsViewContract).hideLoading();
    }


    @Test
    public void addNonNullHymn_callsViewContractSuccess() throws Exception {
        doAnswer(invocation -> {hymnPresenter.handleSuccess();
        return null;}).when(hymnRepository).addHymn(any(Hymn.class));

        hymnPresenter.addHymn(hymn);
        verify(hymnsViewContract).success();
        verify(hymnsViewContract).hideLoading();
    }
}
有什么问题吗?

我建议您研究一下,因为它是Android的go to mocking库。您的代码结构走上了正确的轨道,使用契约模式让接口定义您的需求

然后,您可以设置JVM测试(在您的机器上运行的测试与在设备上运行的测试),在这里您可以测试演示者


我建议您通读这篇文章,以便更好地了解如何测试代码。

谢谢。我要试一试。希望这次我能理解到底发生了什么。如果你需要更多的讨论,请随时给我留言!
public interface HymnPresenterContract {
    void addHymns(ArrayList<Hymn> hymns);
    void addHymn(Hymn hymn);
}
public interface HymnsViewContract {
    void success();
    void error(String error);
}
@RunWith(MockitoJUnitRunner.Silent.class)
public class HymnPresenterTest {

    @InjectMocks
    public HymnPresenter hymnPresenter;
    @Mock
    public HymnRepository hymnRepository;
    @Mock
    public HymnsViewContract hymnsViewContract;
    @Mock
    private Hymn hymn;
    ArrayList<Hymn> hymns;

    @Before
    public void setUp() throws Exception {
        hymns = new ArrayList<>();
        hymns.add(hymn);
    }

    @Test
    public void addHymn_callsRepositoryAddHymn() throws Exception {
        hymnPresenter.addHymn(hymn);
        verify(hymnRepository).addHymn(eq(hymn));
    }

    @Test
    public void addHymns_callsRepositoryAddHymns() throws Exception {
        hymnPresenter.addHymns(hymns);
        verify(hymnRepository).addHymns(eq(hymns));
    }

    @Test
    public void addHymns_callsViewContractShowLoading() throws Exception {
        hymnPresenter.addHymns(hymns);
        verify(hymnsViewContract).showLoading();
    }

    @Test
    public void addHymn_callsViewContractShowLoading() throws Exception {
        hymnPresenter.addHymn(hymn);
        verify(hymnsViewContract).showLoading();
    }

    @Test
    public void addNullHymn_callsViewContractError() throws Exception {
        hymnPresenter.addHymn(null);
        verify(hymnsViewContract).error(anyString());
        verify(hymnsViewContract).hideLoading();
    }

    @Test
    public void addEmptyHymnList_callsViewContractError() throws Exception {
        ArrayList<Hymn> list = new ArrayList<>();
        hymnPresenter.addHymns(list);
        verify(hymnsViewContract).error(anyString());
        verify(hymnsViewContract).hideLoading();
    }


    @Test
    public void addNonNullHymn_callsViewContractSuccess() throws Exception {
        doAnswer(invocation -> {hymnPresenter.handleSuccess();
        return null;}).when(hymnRepository).addHymn(any(Hymn.class));

        hymnPresenter.addHymn(hymn);
        verify(hymnsViewContract).success();
        verify(hymnsViewContract).hideLoading();
    }
}
java.lang.NullPointerException
    at com.ogotera.gusiihymnal.presenter.HymnPresenter.addHymn(HymnPresenter.java:43)
    at com.ogotera.gusiihymnal.presenter.HymnPresenterTest.addHymn_callsViewContractShowLoading(HymnPresenterTest.java:64)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.mockito.internal.runners.DefaultInternalRunner$1.run(DefaultInternalRunner.java:79)
    at org.mockito.internal.runners.DefaultInternalRunner.run(DefaultInternalRunner.java:85)
    at org.mockito.junit.MockitoJUnitRunner.run(MockitoJUnitRunner.java:163)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMainV2.main(AppMainV2.java:131)