我正在尝试向我的应用程序添加一些单元测试。我正在 Android Studio 中开发我的应用程序
这就是我所做的。
添加了新包
在新包中创建了一个扩展的类TestCase
在创建的类中添加了以下方法
@SmallTest
public void basicTest() {
assertEquals("abc", "abc");
}
defaultConfig中的部分build.gradletestApplicationId "newly.added.package.name"
testInstrumentationRunner "android.test.InstrumentationTestRunner"
gradlew.bat connectedAndroidTest
但是,当我检查生成的 html 报告时,它显示运行了 0 个测试。
我尝试了以下操作,但它们都没有对命令的输出产生影响gradlew.bat connectedAndroidTest。
testApplicationId在 中添加了不正确的包名称build.gradle。为什么我的测试用例没有被执行?我错过了什么?
以下是我的build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 20
buildToolsVersion "21.1.1"
defaultConfig {
applicationId "my.package.name"
minSdkVersion 12
targetSdkVersion 18
testApplicationId "my.package.name.tests"
testInstrumentationRunner "android.test.InstrumentationTestRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' …Run Code Online (Sandbox Code Playgroud) 我正在按照下面的文章来了解git的内部结构.
http://git-scm.com/book/en/v2/Git-Internals-Git-References
它说git存储对.git/refs/heads目录中每个分支的最新提交对象的引用.
在我的一个git存储库中,我发现.git/refs/heads目录中没有任何内容.我检查的所有其他存储库都包含存储库中每个分支的文件.
这个空的存储库.git/refs/heads实际上有一个主分支,它完美地工作.
有人可以解释为什么.git/refs/heads是空的,git如何在这种情况下没有问题?
在我的java应用程序中,我有一个TCP服务器,它将我应用程序中生成的数据发送到所有连接的客户端.对于每个新套接字,我创建一个新线程.以下是线程代码.
public void run() {
try {
PrintStream printStream = new PrintStream(socket.getOutputStream(), true);
while (true) {
if (socket.isClosed()) {
break;
}
synchronized (DataSource.getInstance()) {
printStream.println(DataSource.getInstance().getData());
try {
DataSource.getInstance().wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
数据生成线程写入DataSoure新数据可用时调用,notifyAll()以便处理连接套接字的所有线程唤醒并向客户端发送可用数据.
我的问题是,即使客户端断开连接,也会socket.isClosed()返回true.因此处理套接字的线程永远不会被终止.
为什么会这样?当客户端断开连接时,如何退出线程?
在此答案中,它说“调试”是默认的cmake构建配置。
但是我有不同的看法:
我在CMakeLists.txt中遵循以下命令,根据当前的构建配置选择lib的调试和发行版本。
target_link_libraries(MyApp debug Widgets_d)
target_link_libraries(MyApp optimized Widgets)
Run Code Online (Sandbox Code Playgroud)
似乎当我不分隔-DCMAKE_BUILD_TYPE标志而调用cmake时,将使用小部件而不是Widgets_d(当我删除小部件并尝试构建时,会抱怨lib不存在)。因此,这意味着默认情况下将优化构建配置,而不是调试。
那么,默认的构建配置到底是什么?如果是调试,我的CMakelists.txt可能是什么问题?
我正在尝试获取 log4j 日志文件的文件名。我尝试了以下答案中给出的解决方案。
Enumeration e = Logger.getRootLogger().getAllAppenders();
while ( e.hasMoreElements() ){
Appender app = (Appender)e.nextElement();
if ( app instanceof FileAppender ){
System.out.println("File: " + ((FileAppender)app).getFile());
}
}
Run Code Online (Sandbox Code Playgroud)
但是,Logger.getRootLogger().getAllAppenders()返回一个空枚举。rootLogger(我按照答案中提到的小心使用)
以下是我的log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG">
<Properties>
<!-- This will be used if LOG_FILE_NAME env variable is not set -->
<Property name="LOG_FILE_NAME">my_app_log</Property>
</Properties>
<Appenders>
<RollingFile name="RollingFile-${web:contextPath}"
fileName="${sys:catalina.base}/logs/${env:LOG_FILE_NAME}.log" immediateFlush="true"
filePattern="${sys:catalina.base}/logs/${env:LOG_FILE_NAME}.log.%d{yyyy_MM_dd.HH_mm_ss}">
<PatternLayout pattern="%d{yyyyMMdd-HHmmss.SSS}|%-5p|%t| %-100m (%c{1})%n"/>
<Policies>
<OnStartupTriggeringPolicy/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="DEBUG" includeLocation="false">
<AppenderRef ref="RollingFile-${web:contextPath}"/>
</Root>
</Loggers> …Run Code Online (Sandbox Code Playgroud) 我有两台Linux机器(都是VM),一台有12GB内存,另一台有8GB内存.
我尝试在两台机器上启动相同的java程序,最大可能的最大堆大小(使用-Xmx标志).以下是我得到的结果.
如果我指定超出上限的最大堆大小,我会得到以下错误.
Error occurred during initialization of VM
Could not allocate metaspace: 1073741824 bytes
Run Code Online (Sandbox Code Playgroud)
我检查了两个系统中的空闲内存(使用free命令),我得到了以下内容.
我的问题是,什么决定了java程序可以启动的最大最大堆大小,这不会导致上述错误?(1073741824当程序给出上述错误时,系统有足够的内存来分配内存字节)
在Android Studio 2.X中,当我第一次启动应用程序时,会打开一个设备选择器对话框,其中有一个复选框,上面写着"使用相同的设备以便将来启动".当我选中此复选框时,当我再次启动应用程序时,设备选择器不会出现,并且应用程序直接在先前选择的设备上运行.
但是在Android Studio 3.0中,上面提到的复选框不再存在,所以它要求我每次启动应用程序时都选择该设备.
有没有办法实现以前的行为?
我有一个有输入的角度分量 Person
export class Person {
public name = 'Initial Name';
}
export class PersonComponent implements OnInit, OnChanges {
@Input() public person: Person;
ngOnChanges(changes: SimpleChanges): void {
console.log('changed');
}
}
Run Code Online (Sandbox Code Playgroud)
在该组件的父组件中,如果我替换Person作为子组件输入的对象,则会在子组件中ngOnChanges()触发。
但是,如果我只是改变name了的Person从父组件对象,ngOnChanges()是不能为子组件发射(反正如果我绑定的人名在子模板的html元素,它就会被更新)。
当输入的属性更改时,是否有任何方法可以在子组件中得到通知?
我有一个 MongoDB 集合,其中包含如下所示的文档:
{
createdTimestamp: 111111111111,
items: [{
itemName: 'Name 1',
quantity: 10
}, {
itemName: 'Name 2'
quantity: 20
}]
}
Run Code Online (Sandbox Code Playgroud)
现在,我想更新所有文档,以便itemName: 'Name 1'将其更新为itemName: 'New Name'. 更新后,上述文档应如下所示:
{
createdTimestamp: 111111111111,
items: [{
itemName: 'New Name',
quantity: 10
}, {
itemName: 'Name 2'
quantity: 20
}]
}
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点,而无需自己迭代所有文档?
我使用以下 firebase cli 命令来部署我的 firebase 功能
firebase deploy --only functions
Run Code Online (Sandbox Code Playgroud)
像这样部署时,如何限制函数的实例数量?看起来gcloud命令可以--max-instances选择限制实例,但在 firebase cli 中找不到类似的东西。