标签: code-generation

如何测试代码生成工具?

我目前正在开发一个我的小项目,它以动态方式生成SQL调用以供其他软件使用.SQL调用事先是未知的,因此我希望能够对生成SQL的对象进行单元测试.

您是否了解如何才能做到这一点的最佳方法?请记住,没有可能的方法来了解要生成的所有可能的SQL调用.

目前我唯一的想法是使用regex从db创建接受的SQL的测试用例,并确保SQL将编译,但这不能确保调用返回预期的结果.

编辑:添加更多信息:

我的项目是Boo的扩展,允许开发人员使用一组属性标记他的属性.此属性用于标识开发人员如何将对象存储在DB中.例如:

# This attribute tells the Boo compiler extension that you want to
# store the object in a MySQL db. The boo compiler extension will make sure that you meet
# the requirements
[Storable(MySQL)] 
class MyObject():
    # Tells  the compiler that name is the PK
    [PrimaryKey(Size = 25)]
    [Property(Name)]
    private name as String

    [TableColumn(Size = 25)]
    [Property(Surname)]
    private surname as String

    [TableColumn()]
    [Property(Age)]
    private age as int
Run Code Online (Sandbox Code Playgroud)

好主意是生成的代码不需要使用反射,但它会在编译时添加到类中.是的,编译需要更长的时间,但根本不需要使用Reflection.我目前有代码工作生成所需的方法,在编译时返回SQL,它们被添加到对象并可以被调用,但我需要测试生成的SQL是否正确:P

database testing unit-testing code-generation

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

从Ontology创建Java类

我有一个本体文件(在RDF中),它表示我正在编写的应用程序中的实体.我正在使用Jena,可以通过直接操作三元组来访问Concepts并创建/访问资源.

为了简化操作,我创建了一组Java类,一个用于我的本体中每种类型的资源,同时记住它们的继承和属性.例如

public class Agent{
}
Run Code Online (Sandbox Code Playgroud)

和

public class Person extends Agent{
  private String name;
}
Run Code Online (Sandbox Code Playgroud)

如果本体包含两种类型的资源,Agent并且Person后者是前者的子类.

我意识到创建这些类(以及提取它们的方法)的过程非常单调.如果我在数据库上编写应用程序,我会使用Hibernate的配置文件,并让它处理细节.

我的问题是:是否有可用的工具将本体(在RDF文件中)作为输入,并创建一组表示本体中的概念的Java文件,如上例所示?(或者,如果耶拿本身可以做到这一点,我错过了一些东西)

谢谢.

java rdf code-generation jena

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

自动生成变量*name*以匹配您提供的参数?

R#4.5(欢迎回答5)
VS2008(欢迎回答VS2010)
C#(FWIW)

我正在使用构造函数(问题也适用于方法),并且有Intellisense:

Foo Constructor Intellisense,显示参数变量名称

我还没有为第一个参数"firstName"指定值.今天,我键入"firstName",然后让IDE为我创建该变量(我初始化为某个值).

我知道IDE会为我创建变量.我希望它为我创建变量名称.

我不想输入"firstName".我喜欢参数作者选择的变量名,我想在我的(调用)代码中使用该变量名.

有没有办法让我自动重新生成这些可接受的变量名称(调用代码),因为我按参数参数移动,通过这一行(调用)代码?

c# parameters resharper code-generation visual-studio

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

代码生成器与ORM

我编写了一个代码生成器,为给定的SQL Server/CE数据库生成POCO和存储库.没有什么花哨的,只有简单的CRUD程序才能使用经典的ADO.Net.我的问题是,为什么我应该使用像L2S/EF4这样的ORM而不是自定义代码生成器?每隔2到3年,微软就会发布一些新的数据访问框架/技术,我知道很多开发人员不能总是与最新技术保持联系,但他们每个人都知道经典的ADO.Net,如何修改现有代码以及如何开发新功能.ORM工具是否带来了现在必须的东西,或者我可以坚持使用经典的ADO.Net?

谢谢!

orm ado.net code-generation

9
推荐指数
2
解决办法
3320
查看次数

C中单元测试的自动发生器

在Eclipse/Netbeans或visual studio中是否有可用于C语言的自动单元测试用例生成器?

在这个意义上的生成器,如果我给出一个文件,它应该为所有函数生成单元测试用例.(比如Netbeans的jUnit制造商).

c automated-tests unit-testing code-generation

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

自定义T4生成器生成的类看起来很乱

运行生成器输出文件后,代码看起来真的很混乱.我知道我可能永远不会查看这些文件,但很高兴看到在开发生成器时生成的代码结构很好.

欢迎任何建议.

.net c# t4 code-generation

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

使用SymPy codegen为方程组生成Fortran子例程

基于我在这里找到的前一个例子,我试图找出如何生成一个Fortran代码,该代码对应于我需要坚持的特定形式.所需的FORTRAN代码将如下所示(它基于FitzHugh-Nagumo模型):

  SUBROUTINE FF(NE,U,PAR,F) 
!     ---------- -- 
!     Define the nonlinear term

  IMPLICIT NONE
  INTEGER, INTENT(IN) :: NE
  DOUBLE PRECISION, INTENT(IN) :: U(NE),PAR(*)
  DOUBLE PRECISION, INTENT(OUT) :: F(NE)

  DOUBLE PRECISION u,v,e,a1,a0

    u=U(1)
    v=U(2)
    e=PAR(1)
    a1=PAR(2)
    a0=PAR(3)

    F(1)= u-u**3-v 
    F(2)= e*(u-a1*v-a0)

  END SUBROUTINE FF
Run Code Online (Sandbox Code Playgroud)

我设法在SymPy中创建正确的表达式,但我还没弄清楚如何生成所需的代码codegen.这是我到目前为止的尝试:

from sympy import symbols,latex
from sympy.utilities.codegen import codegen
from sympy.tensor import IndexedBase, Idx
from sympy import Matrix
U, PAR = symbols('U PAR', cls=IndexedBase)

u = U[1]
v = U[2]

e = …
Run Code Online (Sandbox Code Playgroud)

python code-generation sympy python-2.7 codegen

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

仅在Java或Kotlin注释异常变量时自动记录catch块

我想为Java或Kotlin做这个:给出下面的代码

try {...
} catch(@AutoLog e:Exception){// position1
}

在构建期间自动在position1添加日志记录语句.我可以使用AspectJ为catch块添加代码(对于Java和Kotlin),但它适用于所有catch块,我无法检查是否存在@AutoLog注释并且只在它出现时才添加代码.所以我想我必须转向Java(或KAPT for Kotlin)的APT(注释处理工具)?

顺便说一句,我在这里找到了一个KAPT代码生成示例:https://github.com/JetBrains/kotlin-examples/tree/master/gradle/kotlin-code-generation ,但它会生成代码来分隔文件,而我想要的是do是修改原始文件/类并在catch块中添加语句.

java aop code-generation annotations kotlin

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

使用 Raku 计算 e 数

我试图通过计算公式来计算e常数(又名欧拉数) 电子

为了一次性计算阶乘和除法,我写了这个:

my @e = 1, { state $a=1; 1 / ($_ * $a++) } ... *;
say reduce  * + * , @e[^10];
Run Code Online (Sandbox Code Playgroud)

但它没有成功。如何正确地做到这一点?

code-generation lazy-evaluation eulers-number raku

9
推荐指数
2
解决办法
347
查看次数

让MAUI页面继承自定义基类

我希望我的页面类继承以下基类:

public abstract class BaseContentPage<T> : ContentPage where T : BaseViewModel
{
    public BaseContentPage(T viewModel, string pageTitle)
    {
        BindingContext = ViewModel = viewModel;
        Title = pageTitle;
    }

    protected T ViewModel { get; }
}

public partial class MainPage : BaseContentPage<MainVm>
{
    public MainPage(MainVm vm) : base(vm, "Hello")
    {
        InitializeComponent();
    }
}
Run Code Online (Sandbox Code Playgroud)

页面类是部分的,我想,MAUI 会生成一些具有不同父类的隐藏代码。然后我收到以下错误:

CS0263:“类型”的部分声明不得指定不同的基类

有没有办法指定生成的分部类的父类?

编辑

  • 首先,我保留原始标记,它生成不同的基类并导致 CS0263 错误:

public abstract class BaseContentPage<T> : ContentPage where T : BaseViewModel
{
    public BaseContentPage(T viewModel, string pageTitle)
    {
        BindingContext = ViewModel = …
Run Code Online (Sandbox Code Playgroud)

inheritance code-generation maui

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