The method setOnClickListener(View.OnClickListener)解决办法

本文分享了在Android开发中使用View.OnClickListener时遇到的问题及解决方法,包括导入文件的正确方式和方法签名的修改。
转别人的,android.view.View.OnClickListener; 
这条语句很有用


The method setOnClickListener(View.OnClickListener) in the type View is not

遇到的问题有一两个  第一  没看清楚马老师 那个快捷键  (其实就是  alt+/) 
第二  用 alt+/ 快捷键添加之后是 
@Override public void onClick(DialogInterface arg0, int arg1) { // TODO Auto-generated method stub 
而不是视频中的  @Override public void onClick(View v) {    // TODO Auto-generated method stub 
第三  不管怎么修改都无法通过。 
最后我找到了解决办法,正在这里跟大家分享一下 
有两点需要修改 
1.把   @Override public void onClick(DialogInterface arg0, int arg1) { // TODO Auto-generated method stub    改成 
@Override public void onClick(View v) {    // TODO Auto-generated method stub 
  
2. 把 import android.content.DialogInterface.OnClickListener;  改成    import android.view.View.OnClickListener; 
(就是导入的文件)
Wanted but not invoked: button.setOnClickListener( <any android.view.View.OnClickListener> ); -> at com.st.manual.fragment.FirstFragmentTest.testOnViewCreated(FirstFragmentTest.java:108) Actually, there were zero interactions with this mock. Wanted but not invoked: button.setOnClickListener( <any android.view.View.OnClickListener> ); -> at com.st.manual.fragment.FirstFragmentTest.testOnViewCreated(FirstFragmentTest.java:108) Actually, there were zero interactions with this mock. at app//com.st.manual.fragment.FirstFragmentTest.testOnViewCreated(FirstFragmentTest.java:108) public class FirstFragmentTest { private FirstFragment fragment; private ViewPager mockViewPager; private MainAdapter mockAdapter; private View mockRootView; @Before public void setUp() { fragment = new FirstFragment(); } // @Test // public void testOnViewCreated() throws Exception{ // mockRootView = mock(View.class); // setPrivateField(fragment, "rootView", mockRootView); // View view = mock(View.class); // Bundle mockBundle = mock(Bundle.class); // Button mockNextBtn = mock(Button.class); // Button mockSkipBtn = mock(Button.class); // Paint mockPaint = mock(Paint.class); // when(mockRootView.findViewById(anyInt())).thenReturn(mockNextBtn); // when(mockRootView.findViewById(anyInt())).thenReturn(mockSkipBtn); // when(mockSkipBtn.getPaint()).thenReturn(mock(TextPaint.class)); // doNothing().when(mockPaint).setFlags(anyInt()); // // 模拟 按钮冯方法 // doNothing().when(mockNextBtn).setOnClickListener(any()); // doNothing().when(mockSkipBtn).setOnClickListener(any()); /// / // btn 按钮测试逻辑 /// / View.OnClickListener listener = getOnClickListener(mockNextBtn); /// / View.OnClickListener listener2 = getOnClickListener(mockSkipBtn); /// / // 4. 调用监听器 /// / View mockView = mock(View.class); /// / listener.onClick(mockView); /// / listener2.onClick(mockView); // FragmentActivity mockActivity = mock(FragmentActivity.class); // when(mockActivity.findViewById(anyInt())).thenReturn(null); // 可选 // Method requireActivityMethod = Fragment.class.getDeclaredMethod("requireActivity"); // requireActivityMethod.setAccessible(true); // FirstFragment spyFragment = spy(fragment); // when(spyFragment.requireActivity()).thenReturn(mockActivity); // when(mockActivity.toString()).thenReturn("MockFragmentActivity"); // when(mockActivity.findViewById(anyInt())).thenReturn(mockViewPager); // fragment.onViewCreated(view, mockBundle); // } @Test public void testOnViewCreated() { mockRootView = mock(View.class); setPrivateField(fragment, "rootView", mockRootView); // 模拟按钮 Button mockNextBtn = mock(Button.class); Button mockSkipBtn = mock(Button.class); when(mockRootView.findViewById(anyInt())).thenReturn(mockNextBtn); when(mockRootView.findViewById(anyInt())).thenReturn(mockSkipBtn); // 模拟 Paint TextPaint mockPaint = mock(TextPaint.class); when(mockSkipBtn.getPaint()).thenReturn(mockPaint); doNothing().when(mockPaint).setFlags(anyInt()); // 模拟点击事件 doNothing().when(mockNextBtn).setOnClickListener(any(View.OnClickListener.class)); doNothing().when(mockSkipBtn).setOnClickListener(any(View.OnClickListener.class)); // 4. 创建 mock Activity FragmentActivity mockActivity = mock(FragmentActivity.class); doReturn("MockFragmentActivity").when(mockActivity).toString(); // 5. spy fragment,mock requireActivity() FirstFragment spyFragment = Mockito.spy(fragment); Mockito.doReturn(mockActivity).when(spyFragment).requireActivity(); // 6. 创建 mock ViewPager ViewPager mockViewPager = mock(ViewPager.class); when(mockActivity.findViewById(anyInt())).thenReturn(mockViewPager); // 调用方法 spyFragment.onViewCreated(mockRootView, null); // 5. 验证 setOnClickListener 是否被调用 verify(mockNextBtn).setOnClickListener(any(View.OnClickListener.class)); // 6. 获取设置的点击监听器并手动调用 onClick ArgumentCaptor<View.OnClickListener> clickListenerCaptor = ArgumentCaptor.forClass(View.OnClickListener.class); View.OnClickListener capturedListener = clickListenerCaptor.getValue(); // 7. 模拟点击事件 capturedListener.onClick(mockNextBtn); } public class FirstFragment extends Fragment { private View rootView; private ViewPager viewPager; MainAdapter mainAdapter; @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { rootView=inflater.inflate(R.layout.fragment_first,container,false); return rootView; } @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); // 找到按钮并设置点击事件 Button nextButton = rootView.findViewById(R.id.first_next); Button skipButton = rootView.findViewById(R.id.first_skip); // 获取Button的Paint对象 Paint paint = skipButton.getPaint(); // 启用下划线模式 paint.setFlags(Paint.UNDERLINE_TEXT_FLAG); nextButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { switchToNextFragment(); } }); skipButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getActivity().onBackPressed(); } }); // 获取ViewPager的引用 viewPager = requireActivity().findViewById(R.id.view_pager); } 如何处理这个匿名内部类的模拟
07-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值