小编Lah*_*ima的帖子

Android 单元测试:connectedAndroidTest 不执行我的测试用例

我正在尝试向我的应用程序添加一些单元测试。我正在 Android Studio 中开发我的应用程序

这就是我所做的。

  • 添加了新包

  • 在新包中创建了一个扩展的类TestCase

  • 在创建的类中添加了以下方法

@SmallTest public void basicTest() { assertEquals("abc", "abc"); }

  • 将以下内容添加到defaultConfig中的部分build.gradle

testApplicationId "newly.added.package.name" testInstrumentationRunner "android.test.InstrumentationTestRunner"

  • 在 Android Studio 终端中执行以下命令

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)

junit android unit-testing

5
推荐指数
1
解决办法
1608
查看次数

我的.git/refs/heads/master文件在哪里?

我正在按照下面的文章来了解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如何在这种情况下没有问题?

git

5
推荐指数
1
解决办法
1232
查看次数

客户端断开连接后,Socket isClosed()返回false

在我的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.因此处理套接字的线程永远不会被终止.

为什么会这样?当客户端断开连接时,如何退出线程?

java sockets

5
推荐指数
1
解决办法
2531
查看次数

cmake的默认构建配置是什么

答案中,它说“调试”是默认的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可能是什么问题?

c++ cmake

4
推荐指数
2
解决办法
7772
查看次数

Log4j getAllAppenders() 返回 null 枚举

我正在尝试获取 log4j 日志文件的文件名。我尝试了以下答案中给出的解决方案。

/sf/answers/308097121/

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)

java log4j2

4
推荐指数
2
解决办法
5671
查看次数

Java:什么决定了linux机器中可能的最大最大堆大小

我有两台Linux机器(都是VM),一台有12GB内存,另一台有8GB内存.

我尝试在两台机器上启动相同的java程序,最大可能的最大堆大小(使用-Xmx标志).以下是我得到的结果.

  • 12GB机器:9460MB
  • 8GB机器:4790MB

如果我指定超出上限的最大堆大小,我会得到以下错误.

Error occurred during initialization of VM
Could not allocate metaspace: 1073741824 bytes
Run Code Online (Sandbox Code Playgroud)

我检查了两个系统中的空闲内存(使用free命令),我得到了以下内容.

  • 12GB机器:大约3GB免费.
  • 8GB机器:大约4GB免费.

我的问题是,什么决定了java程序可以启动的最大最大堆大小,这不会导致上述错误?(1073741824当程序给出上述错误时,系统有足够的内存来分配内存字节)

java linux

4
推荐指数
1
解决办法
7390
查看次数

Android Studio 3.0要求为每次发布选择设备

在Android Studio 2.X中,当我第一次启动应用程序时,会打开一个设备选择器对话框,其中有一个复选框,上面写着"使用相同的设备以便将来启动".当我选中此复选框时,当我再次启动应用程序时,设备选择器不会出现,并且应用程序直接在先前选择的设备上运行.

但是在Android Studio 3.0中,上面提到的复选框不再存在,所以它要求我每次启动应用程序时都选择该设备.

有没有办法实现以前的行为?

android android-studio

4
推荐指数
1
解决办法
430
查看次数

检测组件的输入属性的角度何时发生变化

我有一个有输入的角度分量 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元素,它就会被更新)。

当输入的属性更改时,是否有任何方法可以在子组件中得到通知?

angular

4
推荐指数
1
解决办法
1484
查看次数

根据 MongoDB 中的属性更新嵌套数组对象

我有一个 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)

有没有办法做到这一点,而无需自己迭代所有文档?

mongodb mongodb-query

4
推荐指数
1
解决办法
3720
查看次数

如何限制 firebase 函数的实例数

我使用以下 firebase cli 命令来部署我的 firebase 功能

firebase deploy --only functions
Run Code Online (Sandbox Code Playgroud)

像这样部署时,如何限制函数的实例数量?看起来gcloud命令可以--max-instances选择限制实例,但在 firebase cli 中找不到类似的东西。

firebase google-cloud-functions firebase-cli

4
推荐指数
1
解决办法
348
查看次数