作者:也曾悲摧过_192 | 来源:互联网 | 2023-02-07 15:26
1> 小智..:
您可以使用Mockito和PowerMockito来模拟Firebase依赖项.对于模拟静态函数(例如FirebaseDatabase.getInstance()
),必须使用PowerMockRunner来运行测试,但稍后可以委托给不同的运行程序.
package com.test.firebasetest;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.when;
@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(JUnit4.class)
@PrepareForTest({ FirebaseDatabase.class})
public class LoginActivityTest {
private DatabaseReference mockedDatabaseReference;
@Before
public void before() {
mockedDatabaseReference = Mockito.mock(DatabaseReference.class);
FirebaseDatabase mockedFirebaseDatabase = Mockito.mock(FirebaseDatabase.class);
when(mockedFirebaseDatabase.getReference()).thenReturn(mockedDatabaseReference);
PowerMockito.mockStatic(FirebaseDatabase.class);
when(FirebaseDatabase.getInstance()).thenReturn(mockedFirebaseDatabase);
}
@Test
public void getSignedInUserProfileTest() {
when(mockedDatabaseReference.child(anyString())).thenReturn(mockedDatabaseReference);
doAnswer(new Answer() {
@Override
public Void answer(InvocationOnMock invocation) throws Throwable {
ValueEventListener valueEventListener = (ValueEventListener) invocation.getArguments()[0];
DataSnapshot mockedDataSnapshot = Mockito.mock(DataSnapshot.class);
//when(mockedDataSnapshot.getValue(User.class)).thenReturn(testOrMockedUser)
valueEventListener.onDataChange(mockedDataSnapshot);
//valueEventListener.onCancelled(...);
return null;
}
}).when(mockedDatabaseReference).addListenerForSingleValueEvent(any(ValueEventListener.class));
new LoginActivity().getSignedInUserProfile();
// check preferences are updated
}
}
您需要为模块添加适当的依赖项build.gradle
:
testCompile 'junit:junit:4.12'
testCompile 'org.powermock:powermock:1.6.5'
testCompile 'org.powermock:powermock-module-junit4:1.6.5'
testCompile 'org.powermock:powermock-api-mockito:1.6.5'