小编m3h*_*hes的帖子

如何以编程方式在 TextView 上设置 ?android:attr/textAppearanceListItem

我正在尝试设置导航抽屉中自定义适配器中的文本视图的文本外观。我想让某些项目的文本比其他项目的文本小(例如谷歌音乐的导航抽屉)。所以我在 getView 方法中有一个 if 语句,我想对列表项使用默认的 android 样式。

我知道我可以执行以下操作:

textView.setTextAppearance(getContext(), android.R.style.TextAppearance_Small);
Run Code Online (Sandbox Code Playgroud)

但我找不到可以在 xml 中设置的 textAppearanceListItem 属性的 android.R.style 值:

android:textAppearance="?android:attr/textAppearanceListItem"
Run Code Online (Sandbox Code Playgroud)

android textview

6
推荐指数
1
解决办法
3491
查看次数

如何从python正确测试C API,C API将返回代码作为错误返回

我的设置

我正在使用Python中的pytest和ctypes在C库中测试函数.C库中的每个函数都调用嵌入式Linux PCI板上的函数,然后C库函数返回一个映射到一组返回码的整数.如果函数成功则返回0,否则返回其他一些错误代码.

问题

我正在寻找一些有关测试此设置的最佳方法的见解,实质上我正在尝试找出测试此库的最佳实践.抛出异常和断言测试用例的最佳方法.我目前使用的测试环境使用pytest,切换会很痛苦.

由于嵌入式linux板具有状态,因此为了测试所有不同的条件,需要为测试设置很多状态.理想情况下,如果出现错误,python将捕获测试中发生的所有错误.

我当前的设置

目前我有包装C库代码的python函数.测试将调用python代码,如果函数没有返回0,则包装python函数将抛出异常.因为我使用ctypes来调用DLL上的函数,所以所有的C函数都被python包装起来以使它们更容易调用,因此传递参数更容易.

好处

  • 如果在设置测试或任何中间测试时出现问题,则会抛出异常.这使得在测试用例设置失败时更容易调试失败的测试用例.

缺点

  • 断言函数成功(返回0)是没用的,因为在函数返回之前会抛出错误.
  • 如果您正在测试在某些条件下调用函数会导致错误,则必须将测试用例包装在凌乱的try-except块中

    try:
       return_code = call_to_c_api()
       assert return_code == 0, "Message about test case"
    except MyCustomException:
       assert MyCustomException.message="Return code of python wrapped api"
    
    Run Code Online (Sandbox Code Playgroud)

另外一个选项

如果其中一个设置函数不起作用,请不要使用python库包装C库并使其进行测试以断言失败.

好处

  • 当您预计发生故障时,很容易断言C API的返回值不是O.

缺点

  • 为了使测试易于调试,每次调用C API都需要在python测试中使用代码以确保它通过.即使只是要求设置测试.这意味着每次测试的代码行数几乎翻倍.(或者你无法在设置中捕获错误,只在测试失败时断言.这意味着当测试用例的安装失败时会进行痛苦的调试)

如果有人能够提供任何有关测试的最佳方法的见解,将不胜感激!可能还有其他方法可以测试我尚未考虑过的方法!

干杯!

python testing automated-tests ctypes pytest

5
推荐指数
0
解决办法
1187
查看次数

typedef中的三个术语是什么意思?

当typedef中有三个项目时,它意味着什么?

例如:

typedef CK_BYTE     CK_PTR       CK_BYTE_PTR;
Run Code Online (Sandbox Code Playgroud)

我知道,如果你只是typedef CK_BYTE CK_PTR; 然后CK_BYTE就可以被称为CK_PTR.

c c++ typedef

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

Python正则表达式匹配,直到多行的字符

我有一个格式如下的文件:

hello = {

     a = "2354a"
     b = "06567567h"


}

goodbye = {
     there = "/home/afhge"

}

...

anotherset = {
      dsfsdf = grhbrwecs
      dfgtmyj = 12345

}
Run Code Online (Sandbox Code Playgroud)

我在python中使用正则表达式,我想要匹配的是大括号内的所有内容,因此得到的匹配输出将是以下列表:

['\n\n\ta = "2345a"\n\tb = "06567567h"\n\n\n', '\n\there = "/home/afhge"\n\n', '\n\tdsfsdf = grhbrwecs\n\tdfgtmyj = 12345\n\n']
Run Code Online (Sandbox Code Playgroud)

我试过正则表达式:

desired_output = re.findall("{[^}]", file_text)
Run Code Online (Sandbox Code Playgroud)

但是这个正则表达式导致列表:

['{\n', '{\n', '{\n', '{\n', '{\n']
Run Code Online (Sandbox Code Playgroud)

看起来[^}]匹配任何字符直到换行符.我试过做:

desired_output = re.findall("{[^}]", file_text, re.S)
Run Code Online (Sandbox Code Playgroud)

desired_output  = re.findall("{[^}]", file_text, re.M)
Run Code Online (Sandbox Code Playgroud)

没有成功:(.

谢谢!

python regex newline python-2.7

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