我正在尝试右对齐Android微调器的文本.我已经通过Stack Overflow并尝试了推荐的解决方案,但它不适合我,所以,我对我做错了什么有点困惑.我的感觉是,由于我犯了错误,我的布局没有被正确拾取.
我的activity.xml文件
<Spinner
android:id="@+id/spinnerStoreType"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"/>
Run Code Online (Sandbox Code Playgroud)
在res\layout下,我创建了一个名为simple_spinner_item.xml的文件
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="40sp"
android:textColor="#FFFFFF"
android:padding="10dip"
android:gravity="right"
/>
Run Code Online (Sandbox Code Playgroud)
最后,在我的活动中,我使用如下:
spinnerStoreType = (Spinner) findViewById(R.id.spinnerStoreType);
ArrayAdapter<CharSequence> adapter =
ArrayAdapter.createFromResource(this,
R.array.transaction_store_array, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
spinnerStoreType.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)
所以,我相信正在使用的simple_spinner_item是默认的,Android的.我不清楚如何使用我的自定义.我认为如果它有相同的名称会自动发生?
我们非常感谢任何帮助.
我一直在试图弄清楚如何对我的BroadcastReceiver进行单元测试,我已经看过StackOverflow和其他网站,但我无法找到问题的解决方案.
在我的mainActivity中,我有以下两个功能:
private void registerNetRcvr(){
if (!isRcvrRegistered) {
isRcvrRegistered = true;
registerReceiver(receiver, new IntentFilter("android.net.wifi.STATE_CHANGE"));
registerReceiver(receiver, new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"));
}
}
private BroadcastReceiver receiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
NetworkHandler.NetworkInfo netInfo = NetworkHandler.handleBcastReceiver(context);
if (netInfo!=null){
handleInfoChange(netInfo);
} else {
handleInfoChange(null);
}
}
};
Run Code Online (Sandbox Code Playgroud)
registerNetRcvr是从onResume函数中调用的(同样我有一个从onPause调用的注销).
从上面可以看出,我有一个函数(handleBcastReceiver)被调用来处理onReceive事件,因此有另一个类,然后有一个从这个函数调用的各种私有函数.
只是稍微复杂一点......在调用onReceive函数时,如上所述,'handleBcastReceiver'函数需要'retreive'正确的数据......并且因此会调用实际检索适当的系统数据如下:
private static NetworkInfo getWiFiNetworkInfo(Context context) {
ConnectivityManager connManager = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
return connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
}
Run Code Online (Sandbox Code Playgroud)
我相信我应该模仿onReceive回调的行为,但我想模拟在调用getWiFiNetworkInfo期间从系统返回的内容.
我的想法是我应该使用RoboElectric这样做,因为它可以遮蔽BroadcastReceiver/ConnectivityManager.我也看过Mockito然而我相信RoboElectric是我需要的,但我接受我可能是错的.据我所知,RoboElectric允许我模仿'Android系统',Mockito允许我模拟我自己的课程.
目前我只是看不出如何测试BroadcastReceiver.另外,我不清楚是否应该运行模拟器来执行此操作,或者只是"运行"我的单元测试,因为"阴影"应该包含我需要的所有内容.最后,如果我要影响BroadcastReceiver,我如何通过此影子过程使WIFI"启用"或"禁用"?事实上,我应该模拟BroadcastReceiver还是只是连接管理器...我真的很困惑!
到目前为止我所做的是在我的应用程序的测试部分(而不是'androidTest'部分)中创建一个BroadcastReceiverTest类.我可以对函数进行常规的简单单元测试,我只是坚持如何模拟这个'系统'行为.
一如既往,非常感谢任何帮助.
android unit-testing mockito robolectric android-broadcastreceiver
我正在使用 Kotlin(用于 Android 开发)并且我正在尝试将一个函数传递给另一个我想用作回调的函数。代码非常基础,因为这只是现在的测试。
请注意,虽然您可能想知道为什么我使用这样的回调,但它只是为了测试目的。在我的实际应用程序中,我希望将回调分配给一个值,并在异步方法完成后稍后调用它。
我不能使用协程等......因为此代码将用于多平台解决方案,因此我对制作函数回调感兴趣。
我的 Kotlin 类将接收函数(回调)
class SampleApi {
private var counter: Int = 0
fun startCounting(initialValue: Int, counterCallBack: (resultVal: Int) -> Unit) {
counter = initialValue
counter++
counterCallBack(counter)
}
}
Run Code Online (Sandbox Code Playgroud)
上面是一个基本类,它有一个函数startCounting,它将接收一个整数和一个函数。然后它将调用该函数并传入一个值。
调用代码
class MainActivity : AppCompatActivity() {
private val sampleApi: SampleApi = SampleApi()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
sampleApi.startCounting(5, {counterCallBack()})
}
private fun counterCallBack(counter: Int) {
Toast.makeText(this, counter.toString(), Toast.LENGTH_SHORT).show()
}
}
Run Code Online (Sandbox Code Playgroud)
上面显示的示例代码包含回调方法(期望接收一个整数),并包含从期望接收函数的 SampleApi 类对 startCounting 方法的调用。
我遇到的问题是这一行:
sampleApi.startCounting(5, {counterCallBack()})
Run Code Online (Sandbox Code Playgroud)
Android Studio 中的错误是由于一个值是该函数需要一个整数,因此我收到错误: …
我按照本网站的教程使用 Intelli-j IDE(社区版)创建了一个 Kotlin 多平台项目:
我没有遵循的是教程的 xCode 部分,因为此时虽然我希望这个项目是多平台的,但我的主要兴趣是 Android。
当我运行common
示例测试时,我看到错误:
e: org.jetbrains.kotlin.konan.MissingXcodeException: An error occurred during an xcrun execution. Make sure that Xcode and its command line tools are properly installed.
我还可以看到,对于相关配置,任务详细说明如下:
cleanIosTest iosTest
这就是我收到错误的原因。
我不知道如何更改Sample Test
以不运行该配置。我尝试删除这些任务、应用并保存,但当我运行它们时它们不断重新出现。我在 build.gradle 文件中看不到任何表明 iOS 特定于测试的内容。
构建.gradle.app
plugins {
id 'org.jetbrains.kotlin.multiplatform' version '1.3.72'
}
repositories {
google()
jcenter()
mavenCentral()
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 28
defaultConfig {
applicationId 'org.jetbrains.kotlin.mpp_app_android'
minSdkVersion 15
targetSdkVersion 28
versionCode 1 …
Run Code Online (Sandbox Code Playgroud) android unit-testing intellij-idea kotlin kotlin-multiplatform
我正在尝试为使用 Retrofit 2、Mockito 1.10 和 RXJava 1.0 的 Android 应用程序编写一些单元测试。我没有使用支持 lambda 的 Java 版本!
我的代码使用 Observables,我可以执行以下操作:
when(myAPI.Complete(anyString(), any(MyContainer.class)))
.thenReturn(Observable.<GenericResponse>error(new Throwable("An error has occurred!")));
Subscriber genericResponseSubscriber = mock(Subscriber.class);
myPresenter.myUseCase(id, container, genericResponseSubscriber);
verify(genericResponseSubscriber, times(1)).onError(any(Throwable.class));
Run Code Online (Sandbox Code Playgroud)
上面的代码工作正常,并允许我抛出错误并在测试中捕获它。
我也需要做的(当然):) 是捕捉积极的条件。我觉得这很明显,但找不到我需要的答案。
如何捕获 onComplete 和 onNext 案例?
我知道 onComplete 的验证将是......
验证(genericResponseSubscriber, times(1)).onCompleted();
但我看不出我的“何时”条款应该是什么。我尝试了以下但失败了:
GenericResponse response = new GenericResponse();
response.setSuccess(true);
when(myAPI.orderComplete(anyString(), any(MyContainer.class)))
.thenReturn(Observable.just(response));
Subscriber genericResponseSubscriber = mock(Subscriber.class);
myPresenter.myUseCase(id, container, genericResponseSubscriber);
verify(genericResponseSubscriber, times(1)).onCompleted();
Run Code Online (Sandbox Code Playgroud)
这里的失败是subscriber.onStart() 被调用了。
所以,我想知道的是,我如何模拟和验证“onComplete”和“onNext”调用,更重要的是我应该看起来能够自己解决这个问题而不是问!:)
与往常一样,任何帮助表示赞赏。
编辑..
我的 onError 工作测试用例..
public void UseCaseOnError() throws Exception {?
String id …
Run Code Online (Sandbox Code Playgroud) 我正在尝试为Android学习RXJAVA.部件有意义,我仍然对很多其他部分感到困惑,但是,考虑到一些时间,我希望它会更有意义.
目前我在使用'地图'功能时遇到了麻烦.我收到错误但无法弄清楚如何解决它.
在我分享我的代码之前,我将解释我的理解..在一个简单的层面上.. Observable - 发出数据的代码.Observer - 处理发出数据的代码.Map - 接收类型A的数据并将其返回处理或作为类型B的代码.
所以,考虑到这一点:
在gradle我有:
compile 'io.reactivex.rxjava2:rxjava:2.0.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
Run Code Online (Sandbox Code Playgroud)
如果我有:
//declaration at top of file
private Observable<Integer> myIntObservable;
private Observer<Integer> myIntObserver;
private Observer<String> myStringObserver;
private Observable<String> myStringObservable;
//usage in a function
myIntObserver = new Observer<Integer>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Integer value) {
Toast.makeText(getApplicationContext(), "" + value, Toast.LENGTH_SHORT).show();
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
Toast.makeText(getApplicationContext(), "Int Observer Async Complete", Toast.LENGTH_SHORT).show(); …
Run Code Online (Sandbox Code Playgroud) 我有两个单独的应用程序.我希望appB能够访问appA代码中的数据库.我不想在这个例子中使用内容提供者.
我已经阅读了有关这方面的帖子,并按照说明(在两个Android应用程序之间共享SQLite数据库?).
我做了什么:
AppA的Android Manifest:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.micode.primaryapplication">
<application
android:sharedUserId="com.micode.sharedid"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
AppB的Android清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.micode.secondaryapplication">
<application
android:sharedUserId="com.micode.sharedid"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
AppA创建了一个数据库,AppB需要访问该数据库.
AppB中使用以下代码:
package com.micode.secondaryapplication;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import …
Run Code Online (Sandbox Code Playgroud) 首先,我的设置是 RXJava 1、Retrofit 2,我使用的是 Java 7。
我有一个方法,当它被调用时,会将一个原子布尔值设置为 true。
然后该方法调用改造 API。
完成后,超时等......原子布尔值重置为false。
因此,我想测试一下,当我调用我的方法时,Atomic Boolean 设置为 true。
因此,我执行以下操作:
assertFalse(orderUseCase.isOrderInProcess());
orderUseCase.execute(id, orderWrapper, ts);
assertTrue(orderUseCase.isOrderInProcess());
Run Code Online (Sandbox Code Playgroud)
测试布尔值是否为假。执行我的用例测试布尔值是否为真。
现在,为了执行最后一个测试,我需要确保 API 在调用时什么都不做(execute 方法将调用改造 API。
为了尝试什么都不做,我在测试用例的开头使用了以下行。
doNothing().when(orderAPI.orderComplete(anyString(), any(OrderWrapper.class)));
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
org.mockito.exceptions.misusing.UnfinishedStubbingException:
Unfinished stubbing detected here:
-> at com.tfds.xms.unit_test.SingleTest.TestAtomicBooleanLocked(SingleTest.java:90)
E.g. thenReturn() may be missing.
Examples of correct stubbing:
when(mock.isOk()).thenReturn(true);
when(mock.isOk()).thenThrow(exception);
doThrow(exception).when(mock).someVoidMethod();
Hints:
1. missing thenReturn()
2. you are trying to stub a final method, you naughty developer!
3: you are stubbing the behaviour of another mock inside before 'thenReturn' instruction …
Run Code Online (Sandbox Code Playgroud) android ×8
unit-testing ×4
mockito ×3
rx-java ×3
kotlin ×2
function ×1
java ×1
lambda ×1
layout ×1
powermock ×1
right-align ×1
robolectric ×1
rx-android ×1
shared-data ×1
spinner ×1