我正在 androidTest 中编写测试用例,并且我的代码具有 public string GetProvinceHtml()
{
var provinces = GetProvinces();
bool french = Sitecore.Context.Language == Language.DefaultLanguage;
var html = "<ul>";
foreach (var prov in provinces)
{
var url = "";
if (string.IsNullOrEmpty(HttpContext.Current.Request.Url.Query))
{
url = string.Format("{1}?province={0}&lang={2}",
prov.Code.ToLower(), HttpContext.Current.Request.Url, french ? "fr-CA" : "en-CA");
}
else
{
var nameValues = HttpUtility.ParseQueryString(HttpContext.Current.Request.QueryString.ToString());
if (nameValues["province"] != null)
{
nameValues.Set("province", prov.Code.ToLower());
}
else
{
nameValues.Add("province", prov.Code.ToLower());
}
if (nameValues["lang"] == null)
{
nameValues.Add("lang", french ? "fr-CA" : "en-CA");
}
url = HttpContext.Current.Request.Url.AbsolutePath;
url = url + "?" + nameValues;
}
html += String.Format("<li><a href='{0}'>{1}</a></li>", url,
!french ? prov.Name : prov.FrenchName);
}
html += "</ul>";
return html;
}
,因为在单元测试用例中,我无法访问Android框架类,而且我也没有使用 Roboelectric 用于单元测试。
我正在为应用程序对象获取Pattern.EMAIL_ADDRESS
,就像在我的NullPointerException
中一样,我正在使用此ResetPasswordViewModel
对象来获取字符串值形式application
。
甚至我都嘲笑了string.xml
,但仍然返回null。我尝试使用@Mock Application application
,但仍然无济于事。
我想念什么吗?可能是什么问题?
在 androidTest 情况下如何使用InstrumentationRegistry.getTargetContext()
对象?
请参考以下代码:
application
成绩
@RunWith(AndroidJUnit4.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class ResetPasswordUnitTestsInt {
ResetPasswordViewModel resetPasswordViewModel;
@Rule
public InstantTaskExecutorRule instantTaskExecutorRule = new InstantTaskExecutorRule();
@Mock
Application application;
@Mock
Patterns patterns;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
resetPasswordViewModel = new ResetPasswordViewModel(application);
}
@Test
public void a_testEmailIdFieldNegativeCase() {
resetPasswordViewModel.userName.setValue("");
resetPasswordViewModel.setErrorVisibilityIfBlankField();
Assert.assertEquals(true, resetPasswordViewModel.userNameErrorVisibility.getValue());
}
}
答案 0 :(得分:1)
似乎您错过了androidTest配置中的某些内容(可能在gradle中的某处)。您尝试使用单元测试实践而不是自动化测试。无论如何,以下是基于您的错误的模拟配置示例:
namespace Test
{
public interface IArbitraryQualifier
{
int Qualification { get; }
}
public class ArbitraryQualifier : IArbitraryQualifier
{
public const int MIN_QUALITY = 1;
public int Qualification { get; }
}
public class Person
{
public IArbitraryQualifier ArbitraryQualifier { get; }
public bool AmIARealBoy =>
ArbitraryQualifier.Qualification >= Test.ArbitraryQualifier.MIN_QUALITY;
}
}
当然,将来您还会遇到另一个错误。只需手动配置任何模拟,这对于真正的JEDI来说是很难的方法